ch7-17 제어자(modifier)
modifer는 클래스, 클래스의 멤버 앞에 붙어서 부가적인 의미를 갖는다. modifier 종류는 접근 제어자 4개를 기본으로 그 외 제어자가 있다. 접근 제어자는 1개만 붙일 수 있다. (default)는 아무것도 붙이지 않는다.
여러 제어자(접근 제어자는 하나만)를 같이 쓸 수 있다. 순서는 상관 없지만 접근 제어자를 맨 왼쪽에 쓰는 것이 국룰이다.
static은 멤버 변수, 메서드에 붙일 수 있다. iv 앞에 붙으면 cv가 된다. int width -> static int width
'static { }'는 괄호 안에 static 변수를 초기화한다. 대입 연산자(=)를 사용해서 변수의 값을 초기화하는 것을 간단(명시적) 초기화이다. 괄호({ })를 사용해서 초기화하는 것은 복잡한 초기화이다.
static 메서드, class 메서드에서 iv, instance 메서드 사용 못 한다. 즉 static 메서드 내에서는 인스턴스 멤버를 직접 사용할 수 없다. ⭐⭐⭐ 인스턴스 멤버는 객체 생성 후 사용할 수 있다. 하지만 static 메서 드는 객체를 생성하지 않고 호출할 수 있기 때문에 static 메서드 내에서 인스턴스 멤버를 사용하지 못한다.
modifier를 볼 때 사용할 수 있는 대상이 중요하다. final은 전부 붙을 수 있다.
final이 class 앞에 붙으면 변경될 수 없는 class가 된다. 확장될 수 없다는 말이다. 즉 조상이 될 수 없고 자식을 가질 수 없다. String, Math class가 대표적이다. String은 보안 때문에 확장될 수 없다. String으로 비밀번호를 저장하는데 이를 상속받으면 자손에서 조상 String에 접근할 수 있으므로 보안 문제로 final로 해놓았다. Math는 static 메서드의 집합으로 굳이 상속받아서 쓸 필요가 없다.
변수 앞에 붙으면 상수가 되고 메서드 앞에 붙으면 변경할 수 없다. 메서드가 변경 불가능하다는 것은 오버라이딩 할 수 없다는 뜻이다. 조상 메서드를 덮어쓸 수 없다. final은 마지막의, 변경될 수 없는 2가지가 있는데 class 앞에 붙으면 마지막으로 조상이 될 수 없고 메서드와 변수는 변경할 수 없다.
선언부는 있지만 구현부, 몸통({ })이 없는 메서드를 추상 메서드라 하고 앞에 abstract 제어자를 붙여야 한다. 추상 메서드는 미완성 메서드이다. 따라서 클래스 또한 미완성이므로 앞에 abstract 제어자를 붙인다.
AbstractTest 객체 생성 불가능하다. 추상 메서드를 갖고 있는 추상 클래스의 인스턴스는 생성할 수 없다. 추상 클래스는 상속받아 구현부를 만든 후에 객체 생성가능하다. 완성된 클래스를 추상 클래스의 반대말로 구상 클래스라 한다.
'자바 > 자바의 정석 Ch.7 객체지향 프로그래밍 II' 카테고리의 다른 글
ch7-22 캡슐화 (0) | 2023.04.18 |
---|---|
ch7-21 접근제어자 (0) | 2023.04.18 |
ch7-15, 16 import문, static import문 (0) | 2023.04.16 |
ch7-12~14 패키지, 클래스 패스 (1) | 2023.04.16 |
ch7-10,11 참조변수 super, 생성자 super() (0) | 2023.04.15 |