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 인덱스까지 이동하면서 인접하는 다음 인덱스의 원소와 크기를 비교하여 순서를 바로 잡아 나간다.
- 이 과정을 반복하게 되면 배열의 맨끝에는 배열의 가장 큰 원소가 자리하게 된다.
- 그러면 배열의 제일 마지막을 잊어버리고 이를 반복하게 되면 배열이 차례대로 끝에서 부터 내림차순으로 정렬되게 된다.
[버블정렬(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는 퀵 정렬이다.
# 이번주 첫번째 프로젝트 하는 기간이다. 열심히해서 좋은 결과 남기자!
'교육 > Java' 카테고리의 다른 글
JAVA 개발자 수업 28일차 - HashSet (0) | 2021.05.06 |
---|---|
JAVA 개발자 수업 27일차 - 연결 리스트(LinkedList), iterator (0) | 2021.05.04 |
JAVA 개발자 수업 25일차 (0) | 2021.04.30 |
JAVA 개발자 수업 24일차 - 입출력(INPUT/OUTPUT) (0) | 2021.04.29 |
JAVA 개발자 수업 23일차 - 파일(File) (0) | 2021.04.28 |
댓글