๐Ÿ““ STUDY/JAVA

Class Case Exception

JuneBee 2022. 5. 17. 22:44
728x90
๋ฐ˜์‘ํ˜•

Class Case Exception

import java.util.Arrays;

class Burger{
	String name;
	int price;
	Burger(String name, int price){}
	
}
public class Test01 {
	public static void main(String[] args) {
		Burger[] burgers = new Burger[3];
		burgers[0] = new Burger("1957",6000);
		burgers[1] = new Burger("๋”๋ธ”๋ถˆ๊ณ ๊ธฐ",7000);
		burgers[2] = new Burger("ํ•œ์šฐ๋ฒ„๊ฑฐ", 8000);
		
		Arrays.sort(burgers); //Exception occurs
}
}

์œ„ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ ์‹œํ‚ค๋ฉด ClassCaseException์ด ๋ฐœ์ƒํ•œ๋‹ค

์ด๋Š” Arrays.sort์˜ ๊ธฐ์ค€์ ์ธ comparable์— ๋ฒ„๊ฑฐ ๊ฐ์ฒด (name,int)๋ฅผ ์ •๋ ฌํ•˜๋Š” ๊ธฐ์ค€์ ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” comparable class๋ฅผ implements ํ•ด์„œ compareTo ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•ด์ค˜์•ผํ•œ๋‹ค.

 

๐Ÿคฆ๐Ÿป‍โ™€๏ธ CompareTo Method
return values: ์Œ์ˆ˜, 0 , ์–‘์ˆ˜
์Œ์ˆ˜๊ฐ’ ๋ฆฌํ„ด: ๋‚ด๊ฐ€ ๋น„๊ต๋Œ€์ƒ๋ณด๋‹ค ์•ž์— ์žˆ๋‹ค
0 ๋ฆฌํ„ด: ๋น„๊ต ๋Œ€์ƒ๊ณผ ์ž๋ฆฌ๋ฅผ ๋ฐ”๊พธ์ง€ ์•Š๊ฒ ๋‹ค (์ด๋™ x)
์–‘์ˆ˜๊ฐ’ ๋ฆฌํ„ด: ๋‚ด๊ฐ€ ๋น„๊ต๋Œ€์ƒ๋ณด๋‹ค ๋’ค์— ์žˆ๋‹ค

 

CompareTo๋ฅผ ํ™œ์šฉ

public class Student implements Comparable<Student>{
	int no, score;
	
	public int getNo() {return this.no;}
	public void setNo(int no) {this.no = no;}
	public int getScore() {return this.score;}
	public void setScore(int score) {this.score = score;}
	
	@Override
	public String toString() {
		return "Student [no=" + no + ", score=" + score + "]";
	}
	/* ์Œ์ˆ˜๊ฐ’์ด ๋ฆฌํ„ด์ผ ๊ฒฝ์šฐ ๊ธฐ์ค€์ ์ด ๋น„๊ต๋Œ€์ƒ์˜ ์•ž์— ์œ„์น˜
	 * ์–‘์ˆ˜๊ฐ’์ด ๋ฆฌํ„ด์ผ ๊ฒฝ์šฐ ๊ธฐ์ค€์ ์ด ๋น„๊ต๋Œ€์ƒ์˜ ๋’ค์˜ ์œ„์น˜
	 * 0์ผ ๊ฒฝ์šฐ ์ด๋™ ์—†์Œ*/

	@Override
	public int compareTo(Student o) {
		return this.no - o.no; //์˜ค๋ฆ„์ฐจ์ˆœ
	}

CompareTo

1. ๋‚ด ๋ฒˆํ˜ธ(this.no): 7๋ฒˆ

2. ๋น„๊ต ๋Œ€์ƒ ๋ฒˆํ˜ธ(o.no): 3๋ฒˆ //o๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ ์•ˆ์— ๋“ค์–ด๊ฐ„ ๊ฐ์ฒด์ž„

this.no - o.no >0. ์–‘์ˆ˜๋‹ˆ๊นŒ ๋‚ด๊ฐ€ ๋น„๊ต ๋Œ€์ƒ๋ณด๋‹ค ๋’ค์— ์žˆ์Œ→์ด๋™

 

1. ๋‚ด๋ฒˆํ˜ธ(this.no):3๋ฒˆ
2. ๋น„๊ต ๋Œ€์ƒ ๋ฒˆํ˜ธ(o.no): 7๋ฒˆ → this.no - o.no <0 : ์Œ์ˆ˜๋‹ˆ๊นŒ ์•ž์œผ๋กœ ์ด๋™

 ๐Ÿคฆ๐Ÿป‍โ™€๏ธ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด return๊ฐ’์„ o.no - this.no; ๋กœ ์ฃผ๋ฉด ๋œ๋‹ค

 

 

 

ํ…Œ์ŠคํŠธ ํ•ด๋ณด๋ฉด,

import java.util.Arrays;

public class Test02 {
	public static void main(String[] args) {
		Student[] arr = {
				new Student(2,14),
				new Student(1,50),
				new Student(4,35),
				new Student(3, 90)
		};

		System.out.println(Arrays.toString(arr));
		Arrays.sort(arr);//CompareTo๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œํ•ด์„œ ๊ฐ€๋Šฅ
		System.out.println(Arrays.toString(arr));
	}
}

Sort ๊ฐ€ ์•ˆ๋˜์–ด์žˆ๋Š” ์ถœ๋ ฅ๊ฐ’:

[Student [no=2, score=14], Student [no=1, score=50], Student [no=4, score=35], Student [no=3, score=90]]

 

์˜ค๋ฒ„๋ผ์ด๋”ฉ๋œ Sort๋ฅผ ์ด์šฉํ•œ ์ถœ๋ ฅ๊ฐ’:

[Student [no=1, score=50], Student [no=2, score=14], Student [no=3, score=90], Student [no=4, score=35]]

Comparable ์ธํ„ฐํŽ˜์ด์Šค ํ™œ์šฉ

Comparator ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„

private static class StudentComparator implements Comparator <Student>{
		@Override
		public int compare(Student o1, Student o2) {
			return o2.no - o1.no; //๋‚ด๋ฆผ์ฐจ์ˆœ
		}
	}

//์ ์ˆ˜ ์ˆœ์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ, ์ ์ˆ˜๊ฐ€ ๊ฐ™์œผ๋ฉด ๋ฒˆํ˜ธ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ๊ธฐ์ค€์„
//ํ•œ๊ฐ€์ง€ ์ด์ƒ์œผ๋กœ ๋‘˜ ๋•Œ:
	private static class StudentComparator2 implements Comparator <Student>{
		@Override
		public int compare(Student o1, Student o2) {
			if(o2.score==o1.score) return o2.no-o1.no;//๋‚ด๋ฆผ์ฐจ์ˆœ
			else return o1.score - o2.score ; //์˜ค๋ฆ„์ฐจ์ˆœ
		}
		
	}

๋ฉ”์ธ ๋ฉ”์„œ๋“œ:

public static void main(String[] args) {
		Student[] arr = {
				new Student(2,14),
				new Student(1,50),
				new Student(4,35),
				new Student(5,50), //์ ์ˆ˜๊ฐ€ ๊ฐ™์„ ๋•Œ
				new Student(3, 90)
		
		};
	 // Student Comparator๊ฐ€ ์ •๋ ฌ์˜ ๊ธฐ์ค€์ด ๋œ๋‹ค
	//	Arrays.sort(arr, new StudentComparator1());
	//	System.out.println(Arrays.toString(arr));
		Arrays.sort(arr, new StudentComparator2());
		System.out.println(Arrays.toString(arr));
	}

์ต๋ช… ํด๋ž˜์Šค ์ด์šฉ

private ํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ ์ต๋ช… ํด๋ž˜์Šค๋กœ ๋งŒ๋“ค๋•Œ์—๋Š” new ํ‚ค์›Œ๋“œ ๋‹ค์Œ์—๋Š” ์ƒ์† ํด๋ž˜์Šค๊ฐ€ ์™€์•ผํ•œ๋‹ค

Arrays.sort(arr, new Comparator<Student>(){
			@Override
			public int compare(Student o1, Student o2){
			return o1.score-o2.score;
			}
		});
		System.out.println(Arrays.toString(arr));

๋žŒ๋‹ค์‹ ์ด์šฉ

๐Ÿคฆ๐Ÿป‍โ™€๏ธ @FunctionalInterface: ์ธํ„ฐํŽ˜์ด์Šค ์•ˆ์— ๋ฉ”์„œ๋“œ๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ → ๋žŒ๋‹ค์™€ ์—ฐ๊ด€์ง€์–ด์„œ ์ƒ๊ฐํ•˜์ž
  1. ๋žŒ๋‹ค ํด๋ž˜์Šค์—์„œ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์„ ์–ธ๋ฌธ ๋นผ๊ณ (ํ•˜๋‚˜๋ฐ–์— ์—†์–ด์„œ) ๋ฉ”์„œ๋“œ ์ด๋ฆ„์„ ์“ธ ํ•„์š”๊ฐ€ ์—†๋‹ค.
  2. ๋ฐ˜ํ™˜ ํƒ€์ž… ์—ญ์‹œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ•„์š” ์—†๋‹ค.
  3. ๋˜ํ•œ, Student ์—ญ์‹œ ์ถ”๋ก ์ด ๊ฐ€๋Šฅํ•˜๋‹ค (arr๋ฐฐ์—ด์— ์ด๋ฏธ Student ๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ์–ด์„œ → Student ํƒ€์ž…๋„ ๋น ์ ธ๋„ ๋œ๋‹ค)
  4. ํ•œ๋ฌธ์žฅ ์ผ ๋•Œ, ์ค‘๊ด„ํ˜ธ ์ƒ๋žต ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๋ฆฌํ„ด์„ ๋ฐ˜๋“œ์‹œ ์ œ๊ฑฐํ•ด์•ผํ•จ
Arrays.sort(arr, (o1, o1)-> o1.score - o2.score);
System.out.println(Arrays.toString(arr));
728x90
๋ฐ˜์‘ํ˜•