[JAVA] 컬렉션 프레임워크, 제네릭, 애노테이션, 오버로딩 오버라이딩
컬렉션 프레임워크
- Java Collection은 널리 알려져 있는 자료구조를 바탕으로 객체, 데이터들을 효율적으로 관리할 수 있는 자료구조들이 있는 라이브러리를 컬렉션 프레임워크라고한다.
- List, Set은 Collection 인터페이스를 상속받지만, Map 인터페이스는 구조상의 차이라 별도로 정의한다.
제네릭
- 제네릭은 자바의 타입 안정성을 맡고 있다. 컴파일 과정에서 타입체크를 해주는 기능으로 객체의 타입을 컴파일 시에 체크하기 때문에 객체 타입 안정성을 높이고 형변환의 번거로움을 줄여준다.
애노테이션
- 애노테이션은 인터페이스를 기반으로한 문법으로 주석처럼 코드에 달아 클래스에 특별한 의미를 부여하거나 기능을 주입할 수 있다. built-in annotation은 상속받아서 메소드를 오버라이드 할 때 나타나는
@Override
이 그 대표적인 예이다.
- 메타 애노테이션은 애노테이션을 선언할 때 사용하는 애노테이션이다.
- @Retention
: 애노테이션 유지 범위를 지정한다. (소스, 클래스, 런타임)
@Inherit
: 애노테이션을 하위 클래스까지 전달여부를 지정한다. 이 애노테이션이 있으면 하위 클래스까지 상속이 가능하다.
@Target
: 해당 애노테이션을 어디에 사용할 지 결정한다. (타입, 필드, 메소드, 파라미터, 생성자, 로컬변수, 애노테이션 타입)
오버라이딩과 오버로딩의 차이
- 오버라이딩: 상위 클래스의 메소드를 재정의하는 것을 의미한다. 또, 런타임 다형성이기도 한다.
- 오버로딩: 같은 클래스 내에서 동일한 메소드 이름을 가지지만, 매개변수의 타입, 개수가 다르게 구현할 수 있는 것을 의미하며 컴파일 타임 다형성이기도한다. 따라서 오버라이딩 될 수 있다.
@Override
를 써야하는 이유: 이 애노테이션은 컴파일 타임에 오버라이딩에 대한 안정성을 부여해주기 때문에 반드시 써주는 것이 좋다.