본문 바로가기
교육/Java

JAVA 개발자 수업 26일차 - 익명 객체 (Anonymous Object)

by yhyuk 2021. 5. 4.
728x90
반응형

1. 익명 객체 (Anonymous Object)

2. 정렬 (Sort)


1. 익명 객체 (Anonymous Object)

[정의]

- 이름이 없는 클래스(객체)

- 클래스를 정의하지 않고 객체를 정의한다.

- 1회용 클래스 사용 > 재사용이 불가능한 클래스(객체를 1번 만드는 용도)

- 단독으로 생성 불가, 클래스 상속 및 인터페이스 구현으로 사용 가능하다.

 

[인터페이스를 구현하여 익명 객체 생성하기]

interface AAA() {
    //인터페이스에서의 메소드는 무조건 추상을 의미하는 public abstract가 앞에온다.
    //(public abstract)void test(); --> 생략가능
    void test();
}

class BBB implements AAA{
    @Override
    public void test() {
    	System.out.println("인터페이스 구현 메소드");
    }
}

public static void main(String[] args) {

    AAA c1 = new BBB() //업캐스팅
    AAA c2 = new BBB() 
    c1.test();
    c2.test();
    
    //Error : 인터페이스는 자기를 객체로 생성 못한다.
    //AAA c3 = new AAA() 
    
    //만약 만드는 횟수가 1회일 때, 익명 객체 생성
    AAA c4 = new AAA() { 
        @Override
        public void test() {
            System.out.println("인터페이스 구현 1회용 메소드--1"); 
        }
    };
    
    AAA c5 = new AAA() { 
        @Override
        public void test() {
            System.out.println("인터페이스 구현 1회용 메소드--2"); 
        }
    };
    
}


[설명]

- 인터페이스 AAA 생성

- 인터페이스에 상속받은 BBB 클래스 생성

- AAA를 통해 만든 BBB 의 객체 c1, c2는 똑같은 값을 가진다. 

- AAA를 통해 만든 1회성(재사용불가) 익명 객체 c4, c5는 각각 다른 값을 가진다.

 

 

2. 정렬(Sort)

[정의]

- 값의 우위 비교를 통해 순서를 바꾸는 행동

- 오름차순, 내림차순 정렬

- 버블 정렬, 삽입 정렬, 선택 정렬, 퀵 정렬, 병합 정렬, 힙 정렬, 쉡 정렬... 등등

 

[버블 정렬(Bubble Sort)]

- 가장 기본적인 정렬이며, 가장 많이 쓰이는 정렬방식이다.

- 배열의 처음 인덱스부터 n-1 인덱스까지 이동하면서 인접하는 다음 인덱스의 원소와 크기를 비교하여 순서를 바로 잡아 나간다.

- 이 과정을 반복하게 되면 배열의 맨끝에는 배열의 가장 큰 원소가 자리하게 된다.

- 그러면 배열의 제일 마지막을 잊어버리고 이를 반복하게 되면 배열이 차례대로 끝에서 부터 내림차순으로 정렬되게 된다.

출처: https://itstory.tk/entry/%EB%B2%84%EB%B8%94%EC%A0%95%EB%A0%ACBubble-Sort

 

[버블정렬(Bubble Sort) 정수값 예제]

int[] num = { 5, 3, 4, 1, 2 };

for (int i=0; i<num.length-1; i++) {
    for (int j=0; j<num.length-1-i; j++) {
        //두 방의 값 서로 바꾸기(Swap)
        if (num[j] > num[j+1]) { //부등호만 바꿔주면 오름/내림차순으로 변경 가능
            int temp = num[j]; //값을 옮길 임의의 변수 생성
            num[j] = num[j+1];
            num[j+1] = temp;
        }
        System.out.println(Arrays.toString(num));
    }
}


//OUTPUT
[1, 2, 3, 4, 5]

 

[버블정렬(Bubble Sort) 문자열 예제]

String[] name = { "홍길동", "아무개", "호호호", "가가가", "홍길순" }; 

for (int i=0; i<name.length-1; i++) {
    for (int j=0; j<name.length-1-i; j++) {
        //문자열 우위비교(정렬)는 compareTo 메소드를 사용한다.
        //j+1이 j보다 작으면 -1 크면 1 반환
        if(name[j].compareTo(name[j+1]) > 0) { 
            String temp = "";
            temp = name[j];
            name[j] = name[j+1];
            name[j+1] = temp;
        }
    }
    System.out.println(Arrays.toString(name));
}


//OUTPUT
[가가가, 아무개, 호호호, 홍길동, 홍길순]

 

[버블정렬(Bubble Sort) ArrayList + 익명객체 활용 정수값 예제]

ArrayList<Integer> num = new ArrayList<Integer>();

num.add(10);
num.add(50);
num.add(30);
num.add(40);
num.add(20);

//자바에서는 기본적으로 sort(); 정렬 메소드를 제공한다. (오름차순밖에 안됨. 내림차순X)
//때문에 익명객체 생성으로 사용자(개발자)가 따로 정의한다.
num.sort(new Comparator<Integer>() {
    @Override
    public int compare(Integer o1, Integer o2) {
        return o1 - o2; // o1-o2: 오름차순, o2-o1: 내림차순
    }
};

System.out.println(num);


//OUTPUT
[10, 20, 30, 40, 50]

 

 

[버블정렬(Bubble Sort) ArrayList + 익명객체 활용 문자열 예제]

ArrayList<String> name = new ArrayList<String>();

name.add("홍길동");
name.add("아무개");
name.add("홍동동길");
name.add("김둘리");
name.add("하하");

//이름 길이에서 1차정렬,
//이름 우위비교에서 2차정렬
name.sort(new Comparator<String>() {
    @Override
    public int compare(String o1, String o2) {
        //1차정렬
        if (o1.length() > o2.length()) {
            return 1;
        } else if (o1.length() < o2.length()) {
            return -1;
        } else {
            //2차정렬
            return o1.compareTo(o2); //양수, 음수, 0 중 반환
        }
    }
};

System.out.println(name);


//OUTPUT
[하하, 김둘리, 아무개, 홍길동, 홍동동길]

MEMO>

# 인터페이스를 상속하는 클래스의 객체는 되도록 인터페이스 변수를 만들어서 사용하자.

-> AAA가 인터페이스이고 그것을 상속받은 BBB 일때,

-> AAA temp = new BBB(); --> O

-> BBB temp = new BBB(); --> X

 

# 대부분의 컬렉션은 toString()이 오버라이드 되어있다.

-> 현재 본인의 상태(데이터) 문자열로 반환 

-> 개발자가 확인 용이

 

# 컬렉션 ArrayList에서 Comparator 클래스 여는거 중요함!!(많이 쓰인다)

 

# 자바에서의 sort는 퀵 정렬이다.

 

# 이번주 첫번째 프로젝트 하는 기간이다. 열심히해서 좋은 결과 남기자!

 

728x90
반응형

댓글