추상클래스와 비슷한 인터페이스란것과 자주 쓰이지는 않지만 클래스와 비슷한 구조를 가진 객체를 알아보자.
◆ Interface ( 인터페이스 )
일반 클래스와 다르게 static final field(변수)와 abstract method(메서드)만을 가질 수 있고, 객체 생성이 불가능한 형태의 추상클래스와 비슷한 구조. (일반 변수와, 메서드를 가질 수 없다)
- 인터페이스를 사용하기 위해서 상속의 개념과 비슷한 implements(구현)을 해야 한다.
클래스 뒤에 extends와 비슷하게 implements 인터페이스클래스로 구현한다.
인터페이스 또한 캐스팅이 가능하기 때문에 인터페이스 선언 변수 안에 구현클래스객체 생성으로 캐스팅이 가능하다.
( 인터페이스를 사용하는 가장 큰 이유 중 하나가 다양한 클래스타입을 가질 수 있기 때문이다. )
- 인터페이스는 상속과 다르게 여러 개를 구현할 수 있다. (다형성)
- implements한 인터페이스에 있는 모든 메서드는 반드시 오버라이드 해야한다.
- 클래스 설계 시 인터페이스를 거치는 것이 좋다 (추후 수정 할 때 수정 범위가 줄어든다.)
light-coupling: 상위 객체 변수에 하위 객체를 생성 하는 것.
tight-coupling: 같은 객체 변수에 같은 객체를 생성 하는 것. - 인터페이스의 메서드는 public abstract 밖에 없기 때문에 이 키워드를 생략해도 자동으로 있는 것으로 인식한다.
- JDK1.8버전부터는 default키워드를 이용하여 인터페이스에서도 메서드 구현이 가능하다.(defalut되어 있는 메서드는 자동 완성할 때 D표기가 돼있음)
- 인터페이스는 인터페이스를 extends 할 수 있다.
- 일반 클래스는 여러 개의 인터페이스를 동시에 구현(implements)할 수 있다.
◆ Enum
미리 정해진 데이터를 설정해 두고 사용하는 열거형 객체로, 객체 생성은 불가능하다.
▶enum클래스 정의
▶main에서 사용 :
▶ switch 문에서 처리 가능한 데이터 타입
: 정수, String, enum데이터
클래스 선언과 동시에 미리 객체를 생성시켜 놓는 것과 비슷하게 생각하면 됨
◆ Enum객체 예시
▶ Enum데이터와 비슷한 구조를 가진 클래스 만들기
차이점 : Enum이 아닌 클래스로 만든 Car객체의 경우 switch문 등에서 객체 값을 넣을 수 없음.
◆ annotation ( 원뜻은 주석 )
프로그램에 직접적인 영향은 없지만 컴파일러 혹은 타 시스템에 정보를 제공하는 역할을 함.
(기계가 인식하는 주석) @Override 등등…
=> 우 클릭 new -> annotation 을 하면 public @interface 형식이 만들어짐
=> version은 default값이 있기 때문에 설정하지 않아도 가능하나,
나머지 것들은 default값이 설정되어 있지 않기 때문에 꼭 써 줘야하는 부분이다.
◆ Annotation활용
▶ @Override
오버라이드를 구현 할 때 위에 적어두면 오버라이드 메서드를 구분할 수 있고 오버라이드가 된 건지 확인이 가능하다.
▶ @Deprecated
구현한 클래스에서 더 이상 필요가 없을 것 같을 때 언젠가 지워질 메서드라고 메서드를 사용하는 이용자에게 줄을 그어 알려줌.
▶ /** 로 시작하는 주석을 달면 javadoc의 정보에서 자신이 작성한 정보를 볼 수 있음.
우클릭 -> Export -> javadoc => (jdk->bin->javadoc)추가
=> doc파일이 만들어지고 해당 클래스의 정보를 볼 수 있다.
▶ @SuppressWarnings({“deprecation”, “null”, unused})
deprecation, null, unused( 적어놓은 어노테이션 )에 대한 경고 메시지를 제거.