13장 : 인터페이스와 추상클래스, enum

주리·2022년 11월 18일
0

자바

목록 보기
3/3

인터페이스와 abstract 클래스 사용 이유

  1. 설계 시 선언해두면 개발할 때 기능 구현에만 집중할 수 있음
  2. 메소드 이름과 매개변수 선언의 격차를 줄일 수 있음
    → 사람마다 다르게 만들 시
  3. 선언과 구현을 구분할 수 있음

인터페이스

특징
1. public interface 로 시작한다
2. 내부 선언된 메소드들은 몸통이 있어서 안된다
3. 여러개의 인터페이스를 implements 할 수 있다
→ 구현한다고 표현
4. 인터페이스를 implements 받아 구현할 경우, 인터페이스에 정의된 메소드들의 몸통을 반드시 만들어주어야한다
5. static이나 final 메소드가 있으면 안된다

인터페이스 예시

1 interface MemberManger

public interface MemberManger {
	public boolean addMember(MemberDTO member);
    public bollean removeMember(String name, String phone);
}

2 MemberManger 인터페이스를 구현한 MemberMangerImpl

public class MemberManagerImpl implements MemberManger {
	@Override
    public boolean addMember(MemberDTO member){
    	return false;
    }
    
    @Override
    public boolean removeMember(String name, String phone){
    	return false;
    }
}

3 MemberManagerImpl 을 사용한 InterfaceExample
// MemberManager 는 interface 이기에 객체로 생성하면 abstract어쩌고 오류가 난다!
// MemberManager 를 구현한 MemberManagerImpl을 사용해서 객체를 만들어줘야 한다 !

public class InterfaceExample {
	public static voi dmain(String args[]) {
    	// MemberManager member = new MemberManager();
        MemberManager member = new MemberManagerImpl();
    }
}

abstract 클래스 (=추상클래스)

  • 추상클래스 필요 이유
    → 인터페이스를 쓰다보니 어떤 메소드는 미리 만들어놔도 상관 없는 경우가 생겼다! (공통 메소드 같은 느낌)

특징
1. public abstract 로 시작 (클래스, 메소드 모두)
2. 몸통이 있는 메소드가 있어도 상관X
3. static, final 메소드 있어도 O
4. extneds 를 이용 (상속)

추상 클래스 예시

1 추상클래스 MemberManagerAbstract

public abstract class MemberManagerAbstract{
	public abstract boolean addMember(MemberDTO member);
    public void printLog(String data){
    	System.out.println("Data=" + data);
    }
}

2 추클 MemberManagerAbstract를 상속받은 MemberManagerImpl2
// 추클에서 몸통이 없는 메소드들을 모두 구현해줘야한다 (안그러면 오류남)

public class MemberManagerImpl2 extends MemberManagerAbstract{
	public boolean addMember(Member DTO)
    {
    	return false;
    }
}

인터페이스와 추상클래스 차이점

인터페이스추상클래스클래스
선언 시 사용하는 예약어interfaceabstract classclass
구현 안된 메소드 포함 여부가능(필수)가능불가
구현된 메소드 포함 가능 여부불가가능가능(필수)
static 메소드 선언 가능 여부불가가능가능
final 메소드 선언 가능 여부불가가능가능
상속(extends) 가능불가가능가능
구현(implements) 가능가능불가불가

final (=상수)

특징
1. 클래스가 final로 선언 시 → 상속이 불가능
2. 메소드가 final로 선언 시 → Overriding 불가능
3. 변수가 final 선언 시 → 값을 더이상 바꿀 수 없음 + 초기화가 꼭 필요 !
▶ 매개변수, 지역변수에 final 사용 시에는 초기화할 필요는 X
( 값이 넘어오거나, 메소드 내에서만 사용되어서)
4. 객체를 final로 선언 시 → 객체를 다른 객체로 변경할 수 없음
▶ 객체 내부의 필드 (값) 들은 변화할 수 있음,,
(그 안에 있는 애들이 final은 아니니까)

enum 클래스

특징
1. java.lang.Enum 클래스를 상속받는다
→ 맘대로 다른 enum을 선언해서 사용하면 X

profile
완벽한 글 보다, 그 과정들을 기록하는 개발자

0개의 댓글