[개인공부] 7-17 제어자(modifier)

Walter Mitty·2022년 11월 20일
0

개인공부

목록 보기
12/40
post-thumbnail

제어자

  • 클래스와 클래스의 멤버(멤버 변수, 메서드)에 부가적인 의미 부여

접근제어자

  • public / protected / (default) : 아무것도 안붙일 때! / private
    • 중에 하나만 붙일 수 있다.

그 외

  • static / final / absrtact / native / transient / synchronized / volatile / strictfp

조건

  • 하나의 대상에 여러 제어자를 같이 사용 가능하다.
    • 접근 제어자는 하나만!
public class ModifierTest {
	public static final int WIDTH = 200;
    
    public static void main(String[] args) {
    	System.out.println("WIDTH="+WIDTH);
    }
}

Static - 클래스의, 공통적인

class StaticTest {
	static int width = 200;		// 클래스 변수(static 변수) , 간단초기화(명시적 초기화)
    static int height = 120;	// 클래스 변수(static 변수) , 간단초기화(명시적 초기화) 
    
    static {
    	// static 변수의 복잡한 초기화 수행
    }

	static int max(int a, int b) { 	// 클래스 메서드(static 메서드) - iv 사용불가, im(instance method) 사용불가
    	return a > b ? a : b;
    } 
}

final - 마지막의, 변경될 수 없는

final class FinalTest {				// 조상이 될 수 없는 클래스
	final int MAX_SIZE = 10;		// 값을 변경할 수 없는 멤버변수(상수)
    
    final void getMaxSize() {		// 오버라이딩할 수 없는 메서드(변경불가)
    	final int LV = MAX_SIZE;	// 값을 변경할 수 없는 지역변수(상수)
        return MAX_SIZE;
    }
}
  • 상속계층도의 마지막이다.
    • 상속계층도의 마지막이라는 말은 자손이 없다는건데, final 은 상속불가, 자손이 없으므로 상속계층도의 마지막에 오는 것이다.
  • 대표적인 final class 로는 String, Math가 있다.

abstract - 추상의, 미완성의

abstract class AbstractTest {	// 추상 클래스(추상 메서드를 포함한 클래스)
	abstract void move();		// 추상 메서드({} 구현부가 없는 메서드)
}
  • 추상클래스 = 미완성 클래스
    • 미완성 설계도
      • 제품 생성 불가! 로 이어진다.
AbstractTest a = new AbstractTest(); // ERROR! 추상 클래스의 인스턴스 생성 불가

그럼 추상클래스는 어떻게 사용할까?

  • 추상클래스를 상속받는다
    • 완전한 클래스를 만든 후 객체생성을 한다.

접근제어자 (access modifier)

  • private : 같은 클래스 내에서만 접근이 가능하다
  • (default) : 같은 패키지 내에서만 접근이 가능하다.
  • protected : 같은 패키지 내에서, 그리고 다른 패키지의 자손클래스에서 접근이 가능하다.
  • public : 접근 제한이 전혀 없다.

하나의 대상에 네가지 중 하나만 사용할 수 있다.

클래스 앞에 붙일 수 있는 접근 제어자

  • public
  • (default)

멤버들(iv, im) 앞에 붙일 수 있는 접근 제어자

  • public
  • protected
  • (default)
  • private

0개의 댓글