interface IMember{
// 추상메서드만 올 수 있다.
// 인터페이스의 멤버는 무조건 공개를 원칙으로 한다.
// 추상메서드는 public abstract void aaa();로 선언해야하는데
void aaa(); // 인터페이스 내에서는 이렇게 선언할 수 있다.
}
추상클래스와 인터페이스의 역할은 클래스의 부모역할!
interface IMember{
boolean login(String id, String pw);
void logout();
}
class Member implements IMember{
@Override
public boolean login(String id, String pw) {
return false;
}
@Override
public void logout() {
}
}
자식들이 종류가 다르면 각자 하고 싶은 걸 구현했으면 한다.
기능이 달라도 사용법은 동일하게 만들었으면 한다. -> 최종 사용자가 편리하게 사용하게 하기 위해서.
클래스의 일종
열거값을 가지는 자료형(=제시한 값 중에서 선택해서 사용하는 자료형)
열거형. 객관식에 가깝다.
public class Ex66_enum {
public static void main(String[] args) {
Gender g1=Gender.male;
Gender g2=Gender.female;
}
}
enum Gender{
MALE,
FEMALE
}
제네릭 클래스 : 제네릭의 타입변수 -> 무조건 참조형만 넣을 수 있다.
제네릭 메서드
// 제네릭 클래스
// T : 타입변수 -> 메서드 내의 지역변수용으로는 지양
class Bag<T>{
// 멤버구현
public int a;
public String b; // 정적타입
public T c; // 동적타입
}
아래와 같이 선언하는 것도 가능하다.
class Camera<T,U>{
public T a;
public U b;
}
장점 : 모든 자료형을 넣을 수 있다. -> 코드 비용 감소
단점 : 데이터를 꺼내서 활용할 때 어떤 자료형의 데이터가 들어 있었는지 알기 힘들다. 잘못된 형변환을 할 수 있다. -> 예외 발생 -> 프로그램 안정감소