Posts 객체지향 프로그래밍 - 5(Interface, Enum)
Post
Cancel

객체지향 프로그래밍 - 5(Interface, Enum)

인터페이스

특징

  • 클래스가 사용하는 방식/접점만을 선언하는 클래스와 유사한 툴
  • 아무런 구현이 되어있지 않으며, 모든 메소드가 추상 메소드이다.
  • implements하는 클래스마다 추상 메소드를 다양하게 구현할 수 있어서, 다형성을 활용한 개발을 하기에 편리하다.
  • interface 라는 키워드를 사용한다
  • 멤버 변수의 타입은 항상 public static final 이고 생략 가능하다.
  • 멤버 메소드의 타입은 항상 public abstract 이고 생략 가능하다.
    1
    2
    3
    4
    
      interface IFoo{
      public static final int MEMBER_VAR = 10;
      int MEMBER_VAR2 = 20; // public static final
      public abstract void methodA(int param);
    
    • 인터페이스는 객체를 만들 수 없다.(추상 메소드가 존재하기 때문에)
    • 클래스는 하나만 상속할 수 있지만, 인터페이스는 여러개 가능하다.
    • 인터페이스를 상속받을 때는 implements라는 키워드를 사용한다.
      1
      2
      3
      4
      5
      6
      
        class Foo implements IFoo{
        @Override
        public void methodA(int param) {
        System.out.println(param);
        }
        }
      
    • 인터페이스끼리 상속할 경우 extends를 사용하여 다중상속이 가능하고, 이때 상속하는 인터페이스의 모든 메소드를 선언,구현하지 않아도 된다.
      1
      2
      3
      4
      5
      6
      7
      8
      9
      
        interface Walkable{
        void walk();
        }
        interface Runnable{
        void run();
      }
        interface Jumpable extends Walkable, Runnable{
        void jump();
        }
      

      JDK 1.8 이후의 인터페이스

  • 인터페이스에 default 메소드를 구현할 수 있다.
  • default 메소드의 제어자는 항상 public이다.
  • 인터페이스의 철학과 맞지 않지만, 모든 자식 메소드에 동일하게 구현되어야 하는 메소드가 생긴 경우에 쉽게 기능을 추가하기 위해 만들어졌다.
    1
    2
    3
    4
    5
    
      interface IFooTwo{
      void abstractMethod();
      default void defaultMethod(){ // 디폴트 메소드
        }
      }
    
    1
    2
    3
    4
    5
    6
    7
    
      class FooTwo implements IFooTwo{
      @Override
      public void abstractMethod() {}
      // 디폴트 메소드는 오버라이드 해도 되고, 안하고 그냥 사용할 수도 있다.
      @Override
      public void defaultMethod() {}
      }
    
  • 인터페이스의 static 메소드
    • static 메소드는 인터페이스 명으로 바로 호출 가능하다.
    • 인터페이스를 상속한 자식클래스의 객체는 static 메소드를 호출할 수 없다.
      1
      2
      3
      4
      5
      6
      
      interface IBar{
        static void staticMethod(){
      	System.out.println("static method");
        }
      }
      class Bar implements IBar{}
      
      1
      2
      
      IBar.staticMethod();
      //Bar.staticMethod(); // 구현체인 자식클래스는 클래스 메소드를 호출할 수 없다.
      

열거형(Enumeration)

특징

  • 키워드 : enum
  • 내부적인 구현은 java.lang.Enum을 상속한다. -> 다른 클래스를 상속하지 못한다.
  • 인터페이스 구현은 가능하다.
  • enum에는 열거형 상수와 null 할당이 가능하다.
    1
    2
    3
    
    enum Job{ // 각 상수는 0부터 index를 가지지만, 심볼로만 상수를 사용하고 숫자는 사용하지 않는다.
    STUDENT, MARKETTING, DEVELOPER, CHIEF_EXECUTIONAL_OFFICER; // 대문자에 공백은 언더바로 표현하는것이 관례
    }
    
  • enum도 클래스이다. 이때 상수 각각이 객체가 된다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    enum Symbol{
      ONE, TWO, THREE; // 상수들이 각각 객체가 된다.
      public Symbol nextSymbol(){
          if(this.equals(ONE)){
              return TWO;
          }
          else if(this.equals(TWO)){
              return THREE;
          }
          else
              return ONE;
      }
    }
    
  • 열거형 생성자를 통해 enum 상수 초기화가 가능하다.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    enum Family{
      FATHER("아버지"), MOTHER("어머니"), SON("아들"), DAUGHTER("딸"); // 열거형 상수(객체)
      private String koreanWord; // 멤버 변수(객체에 속하는 변수)
      //private은 생략 가능, public 불가능
      private Family(String koreanWord){
         this.koreanWord = koreanWord;
      }
      // 위 변수에는 Getter, Setter를 통해 접근한다.
      }
      // 열거형 생성자와 멤버 변수 활용
      Family family = Family.SON; // SON 객체가 생성되면서 객체의 koreanWord가 아들로 초기화 된다.
    

Today Link

This post is licensed under CC BY 4.0 by the author.

Contents

Trending Tags