Etc

똘이주인·2021년 5월 12일
0

기타제어자

  • 기타 제어자의 종류

    1. final

      final 제어자는 '변경할 수 없다'는 의미로 사용된다.

      필드나 지역변수에 사용하면 상수가 된다

      final class Car {                    // 이 클래스는 상속을 통해 서브 클래스를 생성할 수 없음.
          final int VAR;                   // 이 필드는 상수화되어 값을 변경할 수 없음.
          final void brake() {             // 이 메소드는 오버라이딩을 통해 재정의할 수 없음.
              final double MAX_NUM = 10.2; // 이 지역 변수는 상수화되어 값을 변경할 수 없음.
          }
      }

    2. static

      static 제어자는 '공통적인' 이라는 의미로 사용된다.

      메소드에 사용하면 해당 메소드를 클래스 메소드로 만들어 준다.

      프로그램 시작시 최초에 단 한 번만 생성되고 초기화된다.

      인스턴스를 생성하지 않고도 바로 사용할 수 있게 된다.

      해당 클래스의 모든 인스턴스가 공유 한다.

      class Car {
          static int var;       // 클래스 필드(static 변수)
          static {              // static 초기화 블록
          // 보통 클래스 필드의 초기화를 진행함.
          }
          static void brake() { // 클래스 메소드(static 메소드)
               ...
          }
      }

    3. abstract

      abstract 제어자는 '추상적인' 이라는 의미로 사용된다.

      추상 메소드: 선언부만 있고 구현부가 없는 메소드

      추상메소드, 추상메소들를 포함하고 있는 클래스는 abstract 제어자를 붙여야한다.

      abstract class Car {       // 추상 클래스
          abstract void brake(); // 추상 메소드
      }

제어자 조합과 주의사항

  1. 클래스에 final과 abstract는 함께 사용할 수 없습니다.

final 제어자를 가지는 클래스는 다른 클래스가 상속받을 수 없게 되며, abstract 제어자를 가지는 클래스는 다른 클래스가 상속해서 오버라이딩해야만 사용할 수 있으므로, 이 두 제어자는 클래스에 함께 사용할 수 없습니다.

  1. 메소드에 static과 abstract는 함께 사용할 수 없습니다.

abstract 제어자를 가지는 메소드는 선언부만 있고 구현부가 없는 메소드인데, static 제어자를 가지는 메소드는 인스턴스를 생성하지 않고도 바로 사용할 수 있어야 하므로, 이 두 제어자는 메소드에 함께 사용할 수 없습니다.

  1. 메소드에 private과 abstract는 함께 사용할 수 없습니다.

abstract 제어자를 가지는 메소드는 다른 클래스가 상속하여 오버라이딩해야만 사용할 수 있는데, private 제어자를 가지는 메소드는 자식 클래스에서 접근할 수 없게 되므로, 이 두 제어자는 메소드에 함께 사용할 수 없습니다.

4. 메소드에 private과 final은 함께 사용할 필요가 없습니다.

메소드에 사용된 final 제어자와 private 제어자는 모두 해당 메소드가 오버라이딩을 통한 재정의를 할 수 없다는 의미를 가지므로, 둘 중에 하나만 사용해도 의미가 충분히 전달될 수 있습니다.

0개의 댓글