학습목표: 인터페이스, 다형성, 패키지개요, 사용자 정의 패키지
인터페이스 사용
인터페이스 사용하는 이유
상속은 경우 논리적으로 is a 관계가 성립해야 하고, 문법적으로 단일상속만 허용됨. 그러나 논리적으로 is a관계가 아니거나 다중상속 받고 싶을 때 인터페이스 사용하면 좋음.
무슨 말이냐면, 프린트 클래스, 카메라 클래스가 있을 때, 폴라로이드 카메라는 프린트랑 카메라 클래스 둘다 상속받으면 쉽게 만들 수 있지만 문법적으로 불가능. 따라서 카메라로부터 상속을 받고 프린터는 인터페이스로 사용하면 다중상속고 유사한 기능 을 구현가능하다.(인터페이스는 변수를 가질 수 없기에 중복되지 않기에 다중상속이 가능하다.)
- 인터페이스 정의하기
인터페이스는 일반 변수를 가지지 못하고 상수만 가지기 때문에, final예약어를 이용해서 멤버변수를 선언해야 함. 또한 인터페이스는 객체 생성할 수 없으므로, 상수는 static을 붙여야 함.
따라서, 인터페이스에서 직접 해당 상수를 사용하려면 반드시 static final을 함께 사용해야 함"
(단 변수선언에 사용된 static final이나 메서드선언에 사용된 abstract는 생략해도 됨ㅋㅋ) - 예시
public interface Drawable{
public static final int PLAIN\_PEN = 1
public static final int BOLD\_PEN = 2
public abstract void draw();
public abstract void move(int x, int y);
}
형변환
인터페이스 사용 시 클래스와 동일하게 묵시적 형변환과 명시적 형변환이 가능함.
인터페이스 계층구조
상속시 여러개의 인터페이스를 상속할 수 있음.그에 따라 계층구조도 가질 수 있음. 이 때 상위 인터페이스가 가지고 있는 메서드까지 모두 구현해야 함.
이때 주의할게, Printable 인터페이스에 새로 추가된 print()메서드는 부모인터페이스의 모든 상수와 추상메서드를 상속하고 있다는 것.
패키지
자바의 클래스들을 분류하고, 관련된 클래스와 인터페이스를 하나의 폴더에 적절히 배치할 때 관련된 클래스들을 묶는 폴더.
- 장점:
다른 기능을 구현했는데 이름이 같은 클래스를 사용할때 이름 충돌 을 피할 수 있음.
관리가 용이하며, 클래스의 접근권한을 패키지단위로 제어가능 - 자바 API 패키지
별표는 자주 사용되는 패키지. - import 예약어
- api에 제공되는 패키지화된 클래스들을 사용하기 위해서 import 사용.
- 별도의 패키지 지정하지 않은 경우엔 디폴트 패키지가 됨.(디폴트 패키지의 클래스는 import사용하지 않고 사용. java.lang패키지도 import문 사용안함)
import 사용예시
- 다른 패키지의 클래스 사용하기
Date클래스는 현재 클래스와 다른 패키지에 있는 클래스이기에 기본적으로 컴파일이 되지 않음.
따라서 외부패키지인 java.util 패키지의 Date클래스를 사용하기 위해서는 import를 선언해야 함.
만약 import안하면 아래처럼 패키지경로까지 다 써줘야 함.
- 만약 다른 패키진데 이름이 같은 클래스를 사용해야 한다면?
java.uitl.Date 랑 java.sql.Date가 있음. 둘다 쓰고 싶으면 자주 쓰는 건 import시켜서 사용하고, 자주 안쓰는 건 패키지경로를 포함해서 그냥 사용하면 된다.
- 만약 다른 패키진데 이름이 같은 클래스를 사용해야 한다면?
- import문 사용시 패키지 이름 지정방법은 컴파일러에게 포함할 클래스를 미리 알려주는 것 임. 따라서 컴파일 시간의 효율성과 연관.
사용자 정의 패키지
여태껏 그냥 마우스로 패키지 새로 만들기 했었는데, 사실은 파일 맨위에 package 선언하는 것임 그게.
- 커스텀라이브러리 생성하기
export 누르면 팝업창에서 JAR file선택! JAR이란 Java Archive의 약자임.
그 후 계속 next 누르다보면, jar 아축파일 안에 class파일들이 있는거 확인가능!
- 커스텀 라이브러리 사용하기
그 담에 파일 선택하고 ok누르면 된다!
'개발삽질 > SSAFY하는 동안 기록' 카테고리의 다른 글
[SSAFY] 오티 : 마음가짐 (2) | 2022.01.07 |
---|---|
[SWEA]자바 초급(2) - 8, 9차시: 예외처리, java.lang패키지 (0) | 2022.01.02 |
[SWEA]자바 초급(2) - 5차시, 6차시: 상속, 내부클래스, 객체의 형변환 (0) | 2021.12.29 |
[SWEA]자바 초급(2) - 4차시: 메서드 오버로딩과 매개변수 (0) | 2021.12.29 |
[SWEA]자바 초급(2) - 2,3차시: Modifier (0) | 2021.12.29 |
댓글