๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ณต๋ถ€/Java

์ต๋ช… ํด๋ž˜์Šค(Anonymous Class), Sort

Ex82 ~ Ex83

 

์ต๋ช… ๊ฐ์ฒด, Anonymous Object
- ์ต๋ช… ํด๋ž˜์Šค, Anonymous Class
- ์ด๋ฆ„์ด ์—†๋Š” ํด๋ž˜์Šค
- ๋ฐ˜๋“œ์‹œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ํ•„์š”ํ•˜๋‹ค.(์ž๋ฐ” ํŠน์„ฑ)

์‹ค๋ช… ํด๋ž˜์Šค
1. ๊ฐ์ฒด๋ฅผ N๊ฐœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
- ํด๋ž˜์Šค ์„ ์–ธ > ๊ฐ์ฒด ์ƒ์„ฑ

์ต๋ช… ํด๋ž˜์Šค
1. ๊ฐ์ฒด๋ฅผ ๋”ฑ 1๊ฐœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. 
- ํด๋ž˜์Šค ์„ ์–ธ + ๊ฐ์ฒด ์ƒ์„ฑ

ํ”„๋กœ์ ํŠธ
- ํด๋ž˜์Šค ๊ฐœ์ˆ˜ + ๋งŽ์Œ > ์ˆ˜๋ฐฑ๊ฐœ~์ˆ˜์ฒœ๊ฐœ ์ด์ƒ
- ์ด๋ฆ„ ์ง“๊ธฐ.. > ์˜์–ด + ์˜๋ฏธ

 

 

//์š”๊ตฌ์‚ฌํ•ญ] ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค ์„ ์–ธํ•˜๊ธฐ > ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ(๋ชฉ์ )

		//1. ๋ณธ์ธ ํƒ€์ž…์˜ ์ฐธ์กฐ ๋ณ€์ˆ˜
		BB o1 = new BB();
		o1.aaa();
		
		//2. ๋ถ€๋ชจ ํƒ€์ž…์˜ ์ฐธ์กฐ ๋ณ€์ˆ˜
		AA o2 = new BB(); //์—…์บ์ŠคํŒ…(๋ถ€๋ชจ๊ฐ€ ์ธํ„ฐํŽ˜์ด์Šค์ผ ๊ฒฝ์šฐ ์—…์บ์ŠคํŒ… ํ”ํ•˜๊ฒŒํ•จ)
		o2.aaa();
		
		//3. ์ถ”์ƒ ํด๋ž˜์Šค, ์ธํ„ฐํŽ˜์ด์Šค > ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋‹ค. > ์ถ”์ƒ ๋ฉ”์†Œ๋“œ ๋•Œ๋ฌธ์—..
		//Cannot instantiate the type AA
		//AA o3 = new AA(); 
		//o3.aaa();
		
		//์ต๋ช… ํด๋ž˜์Šค > ์ต๋ช… ๊ฐ์ฒด(์„ ์–ธ๊ณผ ๋™์‹œ์— ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋จ) 
		//AA๋ฅผ ์ƒ์†๋ฐ›๋Š” ์ด๋ฆ„ ์—†๋Š” ํด๋ž˜์Šค ์„ ์–ธ์ค‘(= BB ํด๋ž˜์Šค์™€ ๋™์ผํ•œ ๋ฌธ๋ฒ•)
		//์ธํ„ฐํŽ˜์ด์Šค์™€ ์ด๋ฆ„์—†๋Š” ํด๋ž˜์Šค๋ฅผ ๋ถ€๋ชจ&์ž์‹์œผ๋กœ ๋งŒ๋“ค์ž(์—…์บ์ŠคํŒ…)
		//The type new AA(){} must implement the inherited abstract method AA.aaa()
		AA o4 = new AA() {
			@Override
			public void aaa() {
				System.out.println("์ถ”์ƒ ๋ฉ”์†Œ๋“œ ๊ตฌํ˜„2");
			}
		};
		
		o4.aaa();
		
		AA o5 = new AA() {
			@Override
			public void aaa() {
				System.out.println("์ถ”์ƒ ๋ฉ”์†Œ๋“œ ๊ตฌํ˜„2");
			}
		};
		
		o5.aaa();
		
		
	}//main

}//main class

interface AA {
	void aaa();
}

class BB implements AA {
	@Override
	public void aaa() {
		System.out.println("์ถ”์ƒ ๋ฉ”์†Œ๋“œ ๊ตฌํ˜„");
	}
}

Sort

package com.test.obj.type;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;

public class Ex83_Sort {

	public static void main(String[] args) {
		
		
		//m1();
		//m2();
		//m3();
		//m4();
		//m5();
		//m6();
		m7();
		
		
		
		
	}//main

	private static void m7() {
		
		ArrayList<Integer> nums = new ArrayList<Integer>();
		
		nums.add(5);
		nums.add(4);
		nums.add(2);
		nums.add(1);
		nums.add(3);
		
		Collections.sort(nums, new Comparator<Integer>() {

			@Override
			public int compare(Integer o1, Integer o2) {
				
				return o1 - o2;
			}
			
		});
		
		System.out.println(nums);
		
		
		nums.sort(new Comparator<Integer>() {
			@Override
			public int compare(Integer o1, Integer o2) {
				
				return 0;
			}
		});
		
	}

	private static void m6() {
		
		Student[] list = new Student[5];
		
		list[0] = new Student("๊ฐ€๊ฐ€๊ฐ€", 100, 90, 80);
		list[1] = new Student("๋‚˜๋‚˜๋‚˜", 99, 98, 88);
		list[2] = new Student("๋‹ค๋‹ค๋‹ค", 87, 89, 79);
		list[3] = new Student("๋ผ๋ผ๋ผ", 65, 67, 87);
		list[4] = new Student("๋งˆ๋งˆ๋งˆ", 76, 79, 68);
		
		Arrays.sort(list, new Comparator<Student>() {
			@Override
			public int compare(Student o1, Student o2) {
				
				//๊ตญ์–ด์„ฑ์  ์˜ค๋ฆ„์ฐจ์ˆœ
				//return o1.getKor() - o2.getKor();
				
				//์ „์ฒด์„ฑ์  ๋‚ด๋ฆผ์ฐจ์ˆœ
				return (o2.getKor() + o2.getEng() + o2.getMath()) - (o1.getKor() + o1.getEng() + o1.getMath());
			}
		});
		
		System.out.println(Arrays.toString(list));
		
		
	}

	private static void m5() {
		
		String[] names = { "ํ™๊ธธ๋™", "์•„๋ฌด๊ฐœ", "ํ•˜ํ•˜ํ•˜", "๊ฐ€๊ฐ€๊ฐ€", "๋‚˜๋‚˜๋‚˜", "๊น€๋ฏผ", "๋‚จ๊ถ์žฌ๋ฏผ" };
		
		//๊ฐ€๋‚˜๋‹ค์ˆœ > ์˜ค๋ฆ„์ฐจ์ˆœ
		Arrays.sort(names);
		System.out.println(Arrays.toString(names));
		
		Arrays.sort(names, new Comparator<String>() {
			@Override
			public int compare(String o1, String o2) {
				//๋‚ด๋ฆผ์ฐจ์ˆœ
				return o2.compareTo(o1); //String๋ผ๋ฆฌ ๋น„๊ต. o1 o2 ๋ฐ”๊พธ๋ฉด ์˜ค๋ฆ„์ฐจ์ˆœ
				
			}
		});
		System.out.println(Arrays.toString(names));
		
		//๊ธ€์ž์ˆ˜ ์ˆœ์œผ๋กœ..
		Arrays.sort(names, new Comparator<String>() {
			@Override
			public int compare(String o1, String o2) {
				
				return o1.length() - o2.length();
			}
		});
		System.out.println(Arrays.toString(names));
		
		
		
	}

	private static void m4() {
		
		Integer[] nums = { 1, 5, 4, 2, 3 };
		
		//๊ฐ์ฒด ์ƒ์„ฑ์„ ๋งค๊ฐœ๋ณ€์ˆ˜ ์œ„์น˜์—์„œ(๊ฐ€์žฅ ๋งŽ์ด ์“ฐ๋Š” ํ˜•์‹.. ์ต์ˆ™ํ•ด์งˆ๊ฒƒ)
		Arrays.sort(nums, new Comparator<Integer>() {
			@Override
			public int compare(Integer o1, Integer o2) {
				return o2 - o1;
			}
		});
		
		System.out.println(Arrays.toString(nums));
		
	}

	private static void m3() {
		
		Integer[] nums = { 1, 5, 4, 2, 3 };
		
		//Comparator๋Š” ์ธํ„ฐํŽ˜์ด์Šค
		//์ต๋ช…ํด๋ž˜์Šค > ์ต๋ช…๊ฐ์ฒด
		//๋ฐ‘์—์„œ ๋งŒ๋“  MyComparator๋ž‘ ๋˜‘๊ฐ™์Œ(์ฐจ์ด๋Š” ์ด๋ฆ„์žˆ or ์—†)
		Comparator<Integer> my = new Comparator<Integer>() {

			@Override
			public int compare(Integer o1, Integer o2) {
				
				//๋‚ด๋ฆผ์ฐจ์ˆœ
				return o2 - o1;
			}
			
		};
		
		Arrays.sort(nums, my);
		
		System.out.println(Arrays.toString(nums));
		
	}

	private static void m2() {
		
		Integer[] nums = { 1, 5, 4, 2, 3 };
		
		//Arrays.sort(nums);
		//System.out.println(Arrays.toString(nums));
		
		MyComparator my = new MyComparator();
		
		Arrays.sort(nums, my);
		System.out.println(Arrays.toString(nums));
		
	}

	private static void m1() {
		int[] nums = { 1, 5, 3, 4, 2 };
		
		System.out.println(Arrays.toString(nums));
		
		Arrays.sort(nums);
		System.out.println(Arrays.toString(nums));
		System.out.println();
		
		ArrayList<Integer> nums2 = new ArrayList<Integer>();
		nums2.add(1);
		nums2.add(5);
		nums2.add(3);
		nums2.add(4);
		nums2.add(2);
		
		System.out.println(nums2);
		Collections.sort(nums2); //ArrayList์˜ ์ •๋ ฌ
		System.out.println(nums2);
		System.out.println();
		
		
		
		Student[] list = new Student[5];
		
		list[0] = new Student("๊ฐ€๊ฐ€๊ฐ€", 100, 90, 80);
		list[1] = new Student("๋‚˜๋‚˜๋‚˜", 99, 98, 88);
		list[2] = new Student("๋‹ค๋‹ค๋‹ค", 87, 89, 79);
		list[3] = new Student("๋ผ๋ผ๋ผ", 65, 67, 87);
		list[4] = new Student("๋งˆ๋งˆ๋งˆ", 76, 79, 68);
		
		//java.lang.ClassCastException: class com.test.obj.type.Student cannot be cast to class java.lang.Comparable 
		//๋ญ˜ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜๋Š”์ง€ ๊ธฐ์ค€ ์—†์Œ
		//Arrays.sort(list);
		
		//๋ฃจํ”„ ์™ธ์šฐ๊ธฐ
		for (int i=0; i<list.length-1; i++) {
			for (int j=0; j<list.length-1-i; j++) {
				
				//๊ตญ์–ด์ ์ˆ˜ ๋‚ฎ>๋†’ ์ˆœ์œผ๋กœ ์ •๋ ฌ
				if (list[j].getKor() > list[j+1].getKor()) {
				
				//์ด์  ๋†’์€ ๊ธฐ์ค€
				//if ((list[j].getKor() + list[j].getEng() + list[j].getMath()) < (list[j+1].getKor() + list[j+1].getEng() + list[j+1].getMath())) {
					
					Student temp = list[j];
					list[j] = list[j+1];
					list[j+1] = temp;
				}
				
			}
		}
		
		
		System.out.println(Arrays.toString(list));
		
		
	}//m1
	
}

class Student {
	//์ˆœ์„œ๋Š” ์—†์ง€๋งŒ ๋ณดํ†ต ๊ฐ์ฒด, ์ƒ์„ฑ์ž, getset, toString ์ˆœ์œผ๋กœ ์ƒ์„ฑ
	
	private String name;
	private int kor;
	private int eng;
	private int math;
	
	public Student(String name, int kor, int eng, int math) {
		this.name = name;
		this.kor = kor;
		this.eng = eng;
		this.math = math;
		
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getKor() {
		return kor;
	}

	public void setKor(int kor) {
		this.kor = kor;
	}

	public int getEng() {
		return eng;
	}

	public void setEng(int eng) {
		this.eng = eng;
	}

	public int getMath() {
		return math;
	}

	public void setMath(int math) {
		this.math = math;
	}

	@Override
	public String toString() {
		return "Student [name=" + name + ", kor=" + kor + ", eng=" + eng + ", math=" + math + "]";
	}
	
}


//์ •๋ ฌํ•  ๋ฐฐ์—ด์˜(nums) ๋ณ€์ˆ˜๊ฐ€ Integer
class MyComparator implements Comparator<Integer> {

	
	//์ •๋ ฌํ•  ๋•Œ ๋น„๊ต ๋‹ด๋‹นํ•˜๋Š” ๋ฉ”์†Œ๋“œ
	
	//o1 vs o2
	
	//- ์˜ค๋ฆ„์ฐจ์ˆœ
	//	- o1 ํฌ๋ฉด > ์–‘์ˆ˜ ๋ฐ˜ํ™˜
	//	- o2 ํฌ๋ฉด > ์Œ์ˆ˜ ๋ฐ˜ํ™˜
	//	- ๊ฐ™์œผ๋ฉด > 0 ๋ฐ˜ํ™˜
	
	//- ๋‚ด๋ฆผ์ฐจ์ˆœ
	//	- o1 ํฌ๋ฉด > ์Œ์ˆ˜ ๋ฐ˜ํ™˜
	//	- o2 ํฌ๋ฉด > ์•ผ์ˆ˜ ๋ฐ˜ํ™˜
	//	- ๊ฐ™์œผ๋ฉด > 0 ๋ฐ˜ํ™˜
	
	
	@Override
	public int compare(Integer o1, Integer o2) { //list[j], list[j+1]
		
//		if (o1 > o2) {
//			return 1;
//		} else if (o1 < o1) {
//			return -1;
//		} else {
//			return 0;
//		}
		
		//o1์ด ํฌ๋ฉด ์–‘์ˆ˜, o2๊ฐ€ ํฌ๋ฉด ์Œ์ˆ˜, ๋˜‘๊ฐ™์œผ๋ฉด 0.. > ์œ„์™€ ๋˜‘๊ฐ™์Œ
		return o1 - o2; 
		
		//๋‚ด๋ฆผ์ฐจ์ˆœ
		//return o2 - o1;
		
	}
	
}