Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

그리미

인터페이스와 추상 클래스 본문

카테고리 없음

인터페이스와 추상 클래스

시앤시 2024. 5. 12. 23:46

문법적 측면

  • 추상 클래스
    • 모든 접근 제어자가 가능하고, 인스턴스 변수를 선언할 수 있다.
    • 람다 표현식을 사용할 수 없다.
  • 인터페이스
    • public, static, final 변수만 가능하고 인스턴스 변수를 선언할 수 없다.
    • 람다 표현식을 사용할 수 있다. (람다는 함수형 인터페이스를 통해서만 가능하다)

 

추상 클래스의 일반 메서드 vs 인터페이스의 디폴트 메서드

  • 인스턴스 변수 접근 가능 차이
    • 상태에 접근할 수 있다는 점에서 차이가 존재한다.
    public abstract class CircleClass {
        private String color;
        private List<String> allowedColors = Arrays.asList("RED", "GREEN", "BLUE");
    
        public boolean isValid() {
            if (allowedColors.contains(getColor())) {
                return true;
            } else {
                return false;
            }
        }
    
        
    }
    
    public class ChildCircleClass extends CircleClass {    // 재정의 하지 않아도 상태에 직접 접근할 수 있다.
    }
    public interface CircleInterface {
        List<String> allowedColors = Arrays.asList("RED", "GREEN", "BLUE"); // 상수
    
        String getColor();
        
        public default boolean isValid() {
            if (allowedColors.contains(getColor())) {
                return true;
            } else {
                return false;
            }
        }
    }
    
    public class ChidlCircleInterfaceImpl implements CircleInterface {
        private String color;       // 인터페이스 구현체에 상태를 정의해야 한다.
      
        @Override
        public String getColor() {  // 재정의 하지 않으면 상태를 가져올 수 없다. (상태에 접근할 수 없다)
            return color;
        }
    
        public void setColor(String color) {
            this.color = color;
        }
    }
  • 추상 클래스는 단일 상속만 가능하고, 인터페이스는 여러 인터페이스들을 구현할 수 있음
    • 디폴트 메서드가 겹치면 재정의 하면 됨
    • 이러한 면에서 인터페이스를 사용하는게 일반적으로 더 좋음