객체 멤버의 접근 제어자에 대한 이해
자바의 접근 제어자
private
- 클래스 내부에서만 접근가능
default
- 같은 패키지 내에서만 접근가능
protected
- 같은 패키지 또는 서브 클래스에서 접근가능
public
- 어디서든 접근 가능
객체 멤버와 정적 멤버
- 객체 멤버
- 객체가 생성될 때마다 각 객체의 내부에 존재
- 정적 멤버
- 클래스 단위로 하나만 존재함.
문제
package org.example.연습장.encapsulation01;
public class ClassA {
private int pri;
int def;
protected int pro;
public int pub;
void runSomething() {
}
static void runStaticThing() {
}
}
Class A 의 | 객체 | 멤버 | ||||
---|---|---|---|---|---|---|
private | default | protected | public | |||
패키지01 | ClassA | runSomething() | O | O | O | O |
패키지01 | ClassA | runStaticThing | O | O | O | O |
패키지01 | ClassB | runSomething() | X | O | O | O |
패키지01 | ClassB | runStaticThing | O | O | O | O |
Class AA | ||||||
패키지01 | ClassAA | runSomething() | X | O | O | O |
패키지01 | ClassAA | runStaticThing | O | O | ||
패키지02 | ClassAB | runSomething() | X | X | O | O |
패키지02 | ClassAB | runStaticThing | O | O | O | O |
패키지02 | ClassC | runSomething() | X | X | X | O |
패키지02 | ClassC | runStaticThing | O | O | O | O |
- ClassAA 와 ClassAB 는 A를 상속받았다.
제어자를 잘 사용하면 높은 응집도와 낮은 결합도를 유지할 수 있기에..
잘 적용해서 써야하겠다.
근데 거의 대부분의 상황에서 private
을 사용할 수 밖에 없을거같다는 개인적인 생각이다.
정적 멤버와 그 사용법
- 일관된 접근법이 필요하다
- 정적 멤버에 접근하는 경우
클래스명.정적멤버
형식을 사용해야한다.
- 객체를 생성한 후
객체참조변수명.정적멤버
형식으로 접근하는 것도 가능은 하겠지만
- 해당 방식은 권장되지 않는다고 한다.
- 정적 멤버에 접근하는 경우
- T메모리상에서의 접근
- 위 그림을 보자.
- 만약
객체참조변수명.정적멤버
로 접근하게 된다면객체참조변수가 가리키는 힙영역에 있는
객체
의 주소로 이동 ⇒ 객체의 정적멤버로 포인팅이 된다.
- 개념적으로도 사실상 공유변수의 어감이기에,
클래스명.정적멤버
사용으로 해당 변수는 클래스적 차원에서 관리된다는 것을 명시할 수 있다고 생각한다.
- 물론, 정적 영역으로 바로 접근하는 것이 조금더 빠를수도 있을 거라 생각한다. 그런데 진짜 미미할듯.
Uploaded by N2T
'자바 > 스프링입문객체지향' 카테고리의 다른 글
[4단원]자바가 확장한 객체지향 초읽기 - Abstract 키워드 - 추상메서드와 추상 클래스 (0) | 2023.08.27 |
---|---|
[3단원]다형성이 지원되지 않는 언어 (0) | 2023.08.26 |
[기타]VO 와 DTO 와 ENTITY 차이 (0) | 2023.08.26 |
[3단원]다중 상속과 자바 (0) | 2023.08.25 |
[3단원]상속과 인터페이스 (0) | 2023.08.25 |