메소드 내용이 없는 interface
- 인터페이스와 추상클래스를 사용하는 이유는
- 설계시 선언해두면 개발 기능 구현하는데 집중할 수 있다
- 개발자 역량에 따른 메소드 이름과 매개 변수 선언 격차를 줄일 수 있다
- 공통적인 인터페이스와 추상클래스를 선언해 놓으면 선언과 구현을 구분할 수 있다
인터페이스를 직접 만들어보자
인터페이스
public interface MemberManager {
public boolean addMember (MemberDto member);
public boolean removeMember(String name, String phone);
public boolean updateMember(MemberDto member);
}
인터페이스 구현체
package interfaceExample;
import object.MemberDto;
public class MemberManagerImpl implements MemberManager {
@Override
public boolean addMember(MemberDto member) {
return false;
}
@Override
public boolean removeMember(String name, String phone) {
return false;
}
@Override
public boolean updateMember(MemberDto member) {
return false;
}
}
- 인터페이스는 여러개 implements 할 수 있다
- 인터페이스에 정의된 메소드를 모두 구현 해야지 정상적인 컴파일이 수행된다
인터페이스 사용법
- 설계단계로만 사용하는 것이 아니라 실제로 외부에 노출되는 것 또한 포함된다
MemberManager member = new MemberManagerImpl();
- 인터페이스에 선언되어 있는 모든 메소드들이 구현되어 있으며, 실제로 메소드 실행 시 구현체들의 메소드들이 실행된다
일부 완성되어 있는 abstract 클래스
- 추상 클래스는 마음대로 초기화하고 실행할 수 없도록 되어 있다
- 추상 클래스는 구현해 놓은 클래스로 초기화 및 실행이 가능하다
public abstract class MemberManagerAbstract {
public abstract boolean addMember (MemberDto member);
public abstract boolean removeMember(String name, String phone);
public abstract boolean updateMember(MemberDto member);
public void printLog(String data) {
System.out.println(data);
}
}
- 클래스와 몸통 없는 메소드 앞에는 abstract 라는 예약어를 명시
- abstract 클래스는 abstract 선언 메소드가 0개 이상 있을 때 선언
- abstract으로 선언된 메소드가 하나라도 있으면 그 클래스는 반드시 abstract으로 선언되어야 한다
- static이나 final 메소드가 있어도 된다.
final
- 클래스와 메소드, 변수에 선언 가능
- 클래스 선언 시
- 상속 불가능
- 상속 받아 내용을 변경하는 것을 방지하기 위함
- 상속 불가능
- 메소드 선언 시
- 오버라이딩이 불가하다
- 변수
- 더 이상 바꿀 수 없다 라는 뜻
- 반드시 초기 값을 설정해야한다 ( 지역변수나, 매개 변수는 설정하지 않아도 된다)
- 객체
- 객체를 final로 지정했다고해서 내부에 있는 변수들까지 final이라는 뜻은 아니다
Enum
enum 기본 사용
public enum OverTimeValues {
THREE_HOUR,
FIVE_HOUR,
WEEKEND_FOUR_HOUR,
WEEKEND_EIGHT_HOUR
}
상수값 지정
public enum OverTimeValues2 {
THREE_HOUR(18000),
FIVE_HOUR(30000),
WEEKEND_FOUR_HOUR(40000),
WEEKEND_EIGHT_HOUR(60000);
private final int amount;
OverTimeValues2(int amount) {
this.amount = amount;
}
public int getAmount() {
return amount;
}
}
- 생성자 선언부에 package-private와 private 접근 제어자로 사용할 수 있다.
- enum 클래스 또한 일반 클래스와 마찬가지로 컴파일할 때 생성자를 자동으로 만들어준다
사용
OverTimeValues2 values2 = OverTimeValues2.FIVE_HOUR;
System.out.println(values2);
System.out.println(values2.getAmount());
- 위와 같이 사용할 수 있다
enum 부모 클래스는 Enum이어야한다
- enum 클래스는 무조건 enum 클래스의 상속을 받는다
- enum 선언하여 사용시 extends를 해서 사용하면 안된다.
Enum 클래스 메소드
compareTo(E e) 매개 변수로 enum 타입과의 순서 차이를 리턴
getDeclaringClass() | 클래스 타입의 enum을 리턴한다. |
name() | 상수 이름을 리턴한다 |
ordinal() | 상수의 순서를 리턴한다 |
valueOf(Class<T> enumType, String name) | static 메소드이다. |
enum.values
public class OverTimeManager3 {
public static void main(String[] args) {
OverTimeValues2[] valueList = OverTimeValues2.values();
for (OverTimeValues2 value : valueList) {
System.out.println(value);
System.out.println(value.getAmount());
}
}
}
- 반복문을 통해서 여러 개의 값을 가져올 수 있다.
'ETC > 도서' 카테고리의 다른 글
[자바의 신] 15장. String (0) | 2024.09.27 |
---|---|
[자바의 신] 14장. 다 배운 것 같지만, 예외라는 중요한 것이 있어요 (0) | 2024.09.27 |
[자바의 신] 12장. 모든 클래스의 부모 클래스는 Object에요 (0) | 2024.09.27 |
[자바의 신] 10장. 자바는 상속이라는 것이 있어요 (0) | 2024.09.26 |
[자바의 신] 9장. 자바를 배우면 패키지와 접근 제어자는 알아야해요 (0) | 2024.09.26 |