2021.02.02 국비 교육 21일차

[TOC]

중첩클래스

inner 클래스

package com.test;

class Outer{
    int a = 10;
    private int b = 20;
    static int c = 30;

    class Inner {
        int d = 40;

        public void print() {
            System.out.println(a);
            System.out.println(b);
            System.out.println(c);
            System.out.println(d);
        }

    }

    public void info() {
        Inner inner = new Inner(); // 내부에서 inner 객체 생성
        inner.print();
    }
}

public class Ex07_4 {
    public static void main(String[] args) {
        Outer outer = new Outer();
        outer.info();

        System.out.println("==============");
        Outer outer1 = new Outer();
        Outer.Inner inner = outer1.new Inner(); // 외부에서 inner객체 생성
        inner.print();
    }

}

anoymous inner 클래스

  • 이름이 없는 Inner 클래스
  • 일반적으로 인터페이스 또는 추상클래스를 구현하는 클래스를 이용할 때 주로 사용
package com.test2;

interface Flyer{
    public abstract void takeOff();
    public abstract void fly();

    public void land();
}

public class Ex07_7 {

    public static void main(String[] args) {


        Flyer f = new Flyer(){
            public void fly() {
                System.out.println("fly");
            }

            @Override
            public void takeOff() {
                System.out.println("takeOff");

            }

            @Override
            public void land() {
                System.out.println("land");

            }


        };

        f.fly();
        f.takeOff();
        f.land();
    }

}

Comparator

  • 배열에 저장된 클래스의 특정 변수값으로 정렬
package com.test3;

import java.util.Arrays;
import java.util.Comparator;

class Person{
    String anme;
    int age;
    public Person(String anme, int age) {
        this.anme = anme;
        this.age = age;
    }
    @Override
    public String toString() {
        return "Person [anme=" + anme + ", age=" + age + "]";
    }

}

class PersonComp implements Comparator<Person>{

    @Override
    public int compare(Person o1, Person o2) {
        int result = 1;
        if(o1.age >=o2.age) result = -1; // 내림차순
        return result;

        //
//        int result = -1;
//        if(o1.age >= o2.age) result = 1; // 오름차순
//            return result; 
    }


}

public class Ex07_8 {
    public static void main(String[] args) {

        Person p = new Person("홍길동", 20);
        Person p2 = new Person("이순신", 44);
        Person p3 = new Person("유관순", 18);
        Person p4 = new Person("강감찬", 66);

        Person [] ps = {p, p2, p3, p4};

        Arrays.sort(ps, new PersonComp());
        for(Person person : ps) {
            System.out.println(person);
        }

    }

}

DecimalFormat

  • 문자열을 지정된 형태로 변환
package com.test3;

import java.text.DecimalFormat;

public class DecimalFormatTest {

    public static void main(String[] args) throws Exception {


        //숫자 --> String : format

        DecimalFormat df = new DecimalFormat("$###, ###, ###");
        String mesg = df.format(987654321);//long타입 값을 지정
        System.out.println(mesg);

    }

}

문자열 나누기

package com.test3;

public class Ex08_2 {

    public static void main(String[] args) {
        String s = "abcde";
        String s2 = "Hello";
        String s3 = "홍길동/유관순/이순신";



        String[] names = s3.split("/");
        for(int i =0;i<names.length;i++) {
            System.out.println(names[i]);
        }


        //문자열로 바꾸기
        System.out.println(123+"");
        System.out.println(String.valueOf(123));
        //두개 같은방법
    }

}

StringTokenizer

  • 구분값에 따라 문자열 나눔
package com.test3;

import java.util.StringTokenizer;

public class StringTokenizerTest {

    public static void main(String[] args) {


        // "aa/bb/cc" ==> 구분자로 값을 반환
        String data = "aa/bb/cc,dd/ee/xx,kk/yy/zz";

        StringTokenizer st = new StringTokenizer(data,"/ ,");

        while(st.hasMoreTokens()) {
            System.out.println(st.nextToken());
        }

        System.out.println("==============");

        //1. String의 split
        String [] d = data.split("/");
        for(String s : d) {
            System.out.println(s);
        }

    }

}

Stringbuffer

  • 문자열 크기 동적 할당
package com.test3;

public class Ex08_3 {

    public static void main(String[] args) {

        StringBuffer s = new StringBuffer("Hello");

        s.append(" world");
        System.out.println(s); //Hello world

        s.insert(5, "!!! ");
        System.out.println(s); //Hello!!!  world

        s.delete(0, 5);
        System.out.println(s); // !!!  world

        String data = s.toString();
        System.out.println(data); //!!!  world
    }
}

Wrapper

  • 기본형을 객체로 변환 시켜줌
package com.test3;

public class Ex08_8 {
    public static void main(String[] args) {

        //1. 기본형을 Wrapper로 변경
        int num =10;
        Integer x = new Integer(num);

        //2. Wrapper을 기본형으로 변경
        int x2 = x.intValue();
    }
}
package com.test3;

public class WrapperTest {

    public static void main(String[] args) {
        int num =10; // 기본형
        //WrapperClass : Integer, Double, char.... 지원
        //객체타입의 기본형 만들 수 있음
        Integer objnum = new Integer(10); //Interger Wrapper 객체 생성
        //10이 기본형이 아닌 Integer가 됨(객체 10)

        System.out.println(objnum);
        System.out.println(objnum.MAX_VALUE);

        int pdtnum = objnum.intValue(); // 객체값을 10으로 변환
        System.out.println(pdtnum);


        //오토박싱 int -> wrapper
        //언박식 wrapper -> int

    }

}

오토박싱, 오토언박싱

package com.test3;
//import java.lang.*;


public class Ex08_9 {

    public static void main(String[] args) {

        //오토박싱
        int num =10; //기본형
        Integer num2 = num; // 자동오토박싱 int -> 객체
        //Interger num2 = new Interger(num)과 동일처리
        System.out.println(num == num2); // 오토언박싱 후 비교

        Integer num3 = new Integer(200);
        int num4 = num3; // 오토언박싱 개체-> 기본형으로 자동변환
        //int num4 = num3.intValue();

        Object[] obj = new Object[1];
        obj[0] = 10; // 자동 오토박싱 객체로 변환 후 저장

    }

}

Random

package com.test3;

import java.util.Random;

public class Ex08_10 {

    public static void main(String[] args) {

        Random random = new Random();
        int num = random.nextInt(100) + 1;
        System.out.println("1부터 100까지 사이의 임의의 값 :" + num);

        float f = random.nextFloat();
        System.out.println("0.0부터 1.0사이의 임의의값 :" + f);

        boolean b = random.nextBoolean();
        System.out.println("임의의 논리값 :" + b);
    }
}

Calander

package com.test3;

import java.util.Date;
import java.util.Calendar;

public class Ex08_11 {

    public static void main(String[] args) {
        //현재 날짜
        Calendar cal = Calendar.getInstance();

        //년, 월, 일 구하기
        int year = cal.get(Calendar.YEAR);
        int month = cal.get(Calendar.MONTH) + 1;
        int day = cal.get(Calendar.DAY_OF_MONTH);

        System.out.println(year + "년 " + month +"월 " + day + "일 ");

        //시, 분, 초 구하기
        int hour = cal.get(Calendar.HOUR_OF_DAY);
        int minute = cal.get(Calendar.MINUTE);
        int second = cal.get(Calendar.SECOND);

        System.out.println(hour + "시 " + minute + "분 " + second + "초");
        //특정 날짜 설정하기
        Calendar ca12 = Calendar.getInstance();

        //month의 경우 0부터 시작하기 때문에 12월인 경우 11로 지정해야한다.
        cal.set(2014, 11,24);
        Date now = ca12.getTime(); // Date타입으로 변경
        System.out.println(now);

        //날짜 변경
        System.out.println("= 1일 후 =");
        ca12.add(Calendar.DATE, 1);
        System.out.println(ca12.getTime());
        System.out.println("= 6달 전 =");
        ca12.add(Calendar.MONTH, -6);

        System.out.println(ca12.getTime());

    }

}

NumberFormat

package com.test3;

import java.text.NumberFormat;

public class NumberFormatTest {

    public static void main(String[] args) {

        NumberFormat nf = NumberFormat.getCurrencyInstance(); // 현재 지역 화폐 양식

        String mesg = nf.format(987654321);
        System.out.println(mesg);

    }

}

append, concat, + 속도 비교

package com.test3;

public class Test {

    public static void main(String[] args) {
        Test t= new Test();
        t.aaa();
        t.bbb();
        t.ccc();

    }

    private void ccc() {
        long start = System.currentTimeMillis();
        String x = "";
        for(int i=0;i<10000;i++) {
            x= x.concat("aaaaaaaaaaaaa");    
        }
        System.out.println("x.length :" + x.length());
        System.out.println("ccc() :" + (System.currentTimeMillis()-start));
    }


    private void bbb() {
        long start = System.currentTimeMillis();
        StringBuffer x = new StringBuffer();
        for(int i =0;i<10000;i++) {
            x.append("aaaaaaaaaaaaa");
        }
        System.out.println("x.length :" + x.length());
        System.out.println("bbb() :" + (System.currentTimeMillis()-start));
    }

    private void aaa() {
        long start = System.currentTimeMillis();
        String x ="";

        for(int i =0;i<10000;i++) {
            x += "aaaaaaaaaaaaa";
        }
        System.out.println("x.length :" + x.length());
        System.out.println("aaa() :" + (System.currentTimeMillis()-start));
    }
}

Simpledataformat

package com.test3;

import java.text.SimpleDateFormat;
import java.util.Date;

public class Ex08_12 {

    public static void main(String[] args) {
        SimpleDateFormat sdf= new SimpleDateFormat("yyy년 MM월 dd일 HH:mm:ss (a)");

        String date = sdf.format(new Date());
        System.out.println(date);
    }
}

배열 API

package com.test3;

import java.util.Arrays;

public class Ex08_17 {

    public static void main(String[] args) {
        //1. 배열 복사
        String [] str = {"홍길동", "이순신", "유관순"};
        String [] str2 = Arrays.copyOf(str, str.length);
        for(String name : str2) {
            System.out.println(name);
        }


        //2. 특정값으로 전체 채우기
        int [] nums = {10,20,30};
        Arrays.fill(nums, 100);

        for(int num : nums) {
            System.out.println(num);
        }

        //3. 특정값 일부분만 채우기
        String [] fruits = {"사과", "배",  "수박", "바나나"};
        Arrays.fill(fruits, 0, 2, "딸기");
        for (String s : fruits) {
            System.out.println(s);
        }

        //4. 배열 비교
        String [] p = {"홍길동", "이순신", "유관순"};
        String [] p2 = {"홍길동", "이순신", "유관순"};
        System.out.println(Arrays.equals(p,p2));

        //5. 정수형 정렬
        int [] num = {22,1,3,5,2,4,11};
        Arrays.sort(num);
        for(int i : num) {
            System.out.println(i);

        }


        //6. 문자열 정렬
        String [] name = {"xMan", "Alex", "XMan", "Bob", "Curl", "Flex", "alex"};

        Arrays.sort(name); // 기본 오름차순
        for(String s : name) {
            System.out.println(s);
        }

        //7. 인덱스 찾기
        String [] s = {"홍길동", "이순신", "유관순"};
        int index = Arrays.binarySearch(s,  "이순신");
        System.out.println(index);


    }

}

ENUM

  • 상수 배열
package com.test3;

public class EnumTest4 {

    //상수
    public enum DML {SELECT, INSERT, DELETE}


    public static void check(DML num) {
        //byte, short, int, char, String, enum

        switch(num) {
        case SELECT: System.out.println("1"); break;
        case INSERT: System.out.println("2"); break;
        case DELETE: System.out.println("3"); break;
        default: System.out.println("default"); break;
        }
    }

    public static void main(String[] args) {
        //enum 상수 대체 가능

        check(DML.SELECT);
        check(DML.INSERT);
        check(DML.DELETE);
        //check(99); // 의미없는 숫자 불가능

    }

}

예외

  • 의도하지 않은 발생된 문제
  • trycatchfinally 문 이용한 직접처리
  • throws 키워드 이용한 위임처리

try -catch


public class ExceptionTest4 {

    public static void main(String[] args) {

        System.out.println("시작");


        try {
            //작업1
            int num = 10;
            int result = num /2;
            System.out.println(result);

            //작업 2

            String name = "aa";
            System.out.println(name.length());

            //작업 3
            int[] num2 = {10, 20};
            System.out.println(num2[3]); //ArrayIndexofBoundEx


        } catch (NullPointerException e1) {
            System.out.println("NullpointerException : " + e1.getMessage() );
        } catch ( ArithmeticException e2) {
            System.out.println("ArithmeticException : " + e2.getMessage());
        } catch ( Exception e3) {
            System.out.println("예외발생3 : " + e3.getMessage());
            e3.printStackTrace();
        }

        System.out.println("시스템 종료");

    }

}

finally


public class ExceptionTest6 {

    public static void main(String[] args) {

        System.out.println("시작");


        try {
            //작업1
            int num = 10;
            int result = num /2;
            System.out.println(result);

            //작업 2

            String name = "aa";
            System.out.println(name.length());

            //작업 3
            int[] num2 = {10, 20};
            System.out.println(num2[3]); //ArrayIndexofBoundEx


        } catch (NullPointerException e1) {
            System.out.println("NullpointerException : " + e1.getMessage() );
        } catch ( ArithmeticException e2) {
            System.out.println("ArithmeticException : " + e2.getMessage());
        } catch ( Exception e3) {
            System.out.println("예외발생3 : " + e3.getMessage());
            e3.printStackTrace();
        } finally {
            System.out.println("finally 문장");
        }

        System.out.println("시스템 종료");

    }

}

+ Recent posts