본문 바로가기

KOSA FullStack 교육/java

KOSA fullstack 교육(접근지정자, Collection API)

 

접근지정자

1. private: 같은 클래스

2. protected: 상속 시 어디서든지(public), 상속이 아닐 시 같은 폴더(default)에서 접근 가능

3. public: 어디서든

- default: 같은 디렉토리, 같은 패키지 안에서만 접근 허용. 접근지정자를 아무것도 안붙혔을 때가 default이다

 

왜 protected가 생겨났을까?

상속받으면 같은 몸처럼 인식되기 때문에 public처럼 접근이 가능하지만,

외부 클래스까지 모두 접근하게 하고 싶지 않을 때,

즉 “자식은 써도 되지만 남은 보지 마라” 라는 의도로 protected 키워드가 도입되었다.

protected는 “상속을 고려하되, 무분별한 외부 노출을 막기 위한 절충형 접근 제어자”다.

 

 

 

 

Collection API

 

https://docs.oracle.com/javase/8/docs/api/ <- Collection API 모음 사이트

java.util 이 다른 것들에 비해 인터페이스가 훨씬 많다.

 

 

Collection (가장 원시적인)

 

 

Collection을 이용한 정렬(sort)

public class SortTest2 {
	
	public static void main(String[] args) {
		List<Employee> list = new ArrayList<>();
		list.add(new Employee("AAA", 10000.0, 111));
		list.add(new Employee("BBB", 20000.0, 222));
		list.add(new Employee("CCC", 30000.0, 333));
		list.add(new Employee("DDD", 40000.0, 444));
		
		//Collection은 toString()함수가 기본적으로 오버라이딩 되어있다.
		System.out.println(list);
		
		//오름차순 정렬
		Collections.sort(list, new Comparator<Employee>() {
			@Override
			public int compare(Employee o1, Employee o2) {
				return o1.getEmpNo() - o2.getEmpNo();
			}
		});
		
		
		//내림차순 정렬
		Collections.sort(list, new Comparator<Employee>() {

			@Override
			public int compare(Employee o1, Employee o2) {
				return o2.getEmpNo() - o1.getEmpNo();
			}
			
		});
	}
}

 

Comparator는 인터페이스다. 하지만 지금 객체생성 키워드인 new를 쓰는 것을 볼 수 있다. 이는 어떻게 가능할까 

new [[anonymous Inner class] implements] Comparator<Employee>() { ...} 

        -> 여기서 이름이 없는 클래스가 호출이 되었다. (여기서만 쓰이기 때문에 이렇게 사용됨)

        -> 인터페이스 선언과 동시에 함수가 오버라이딩 되면서 호출 된 것이다.