제어자(modifier)
- 접근제어자: public, protected, (default), private
- 그 외: static, final, abstract, native, transient, synchronized, volatile, strictfp
접근 제어자는 하나만, 그 외의 제어자는 중복으로 사용 가능
public static final int WIDTH = 200;
final, static, abstract
제어자 static
멤버변수
- 모든 인스턴스에 공통적으로 사용되는 cv가 됨
- cv는 인스턴스를 생성하지 않고도 사용 가능
- 클래스가 메모리에 로드될 때 생성됨
메서드
- 인스턴스를 생성하지 않고도 호출 가능한 static 메서드가 됨
- static 메서드 내에서는 im을 직접 사용할 수 없음
제어자 final
클래스
- 변경될 수 없는 클래스, 다른 클래스의 조상이 될 수 없음(확장될 수 없음)
- e.g. String, Math 클래스
메서드
- 변경될 수 없는 메서드, 오버라이딩을 통해 재정의 될 수 없음
멤버변수&지역변수
제어자 abstract
클래스
- 클래스 내에 추상 메서드가 선언되어 있음을 의미
메서드
- 선언부만 작성하고 구현부는 작성하지 않은 추상 메서드임을 알림
접근제어자
private
같은 클래스 내에서만 접근 가능
(default)
같은 패키지 내에서만 접근 가능
protected
같은 패키지 내에서, 그리고 다른 패키지의 자손 클래스에서 접근 가능
public
접근 제한이 없음
public 클래스는 소스 파일에 하나만 존재할 수 있다.
캡슐화
-
외부로부터 데이터를 보호하기 위해 사용됨
![](https://velog.velcdn.com/images/j_log/post/027aa439-6c4b-4df7-9b39-38f892d22c58/image.png)
-
외부에는 불필요하고, 내부적으로만 사용되는 부분을 감추기 위함
기본적으로 좁은 범위의 제어자로 설정하고, 필요시 확장하는 것이 좋다.
다형성(polymorphism)
- 여러 가지 형태를 가질 수 있는 능력
- 조상 타입 참조 변수로 자손 타입 객체를 다루는 것
![](https://velog.velcdn.com/images/j_log/post/c67c33bc-9a19-4ae3-ae23-a9fee7fb87a8/image.png)
참조변수의 형변환
- 사용할 수 있는 멤버의 개수 조절
- 조상 자손 관계의 참조변수는 서로 형변환 가능
instanceof 연산자
- 참조변수의 형변환 가능 여부 확인
- 형변환 전 반드시 instanceof로 확인
파라미터의 다형성
참조형 매개변수는 메서드 호출시, 자신과 같은 타입 또는 자손타입의 인스턴스를 넘겨줄 수 있음
![](https://velog.velcdn.com/images/j_log/post/357d9212-00d6-4267-8284-2897ffc562ba/image.png)
다형성 왜 쓰는건지 궁금했는데 이제야 제대로 알아서 속이 후련하다
source: 남궁성의 정석코딩, https://www.youtube.com/watch?v=U-VGYYH-obM&list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp&index=84