전공/객체지향프로그래밍

[객체지향프로그래밍][Java] 클래스와 객체 2 (접근 지정자, static, final)

Campus Coder 2023. 4. 18. 15:39
728x90
반응형

접근지정자

  • public: 어떤 클래스에서든 접근 가능
  • protected: 같은 패키지에 있는 다른 클래스나, 상속받은 자식 클래스에서 접근 가능
  • private: 해당 클래스 내부에서만 접근 가능
  • default(package-private): 같은 패키지 내에서만 접근 가능, 따로 접근 지정하지 않았을 경우 자동으로 지정

접근지정자는 객체지향 프로그래밍에서 캡슐화를 구현
클래스 내부 상태와 행동을 적절히 제어
코드의 유지 보수성과 재사용성 향상
 

클래스 접근 지정

public class World { // public 클래스
}

public 클래스와 디폴트 클래스의 접근 사례

 

멤버 접근 지정

멤버에 접근하는 클래스 private 디폴트 접근 지정 protected public
같은 패키지의 클래스 x o o o
다른 패키지의 클래스 x x x o
접근 가능 영역 클래스 내 동일 패키지 내 동일 패키지와 자식 클래스 모든 틀래스

 

static

non-static 멤버, static 멤버

  non-static 멤버 static 멤버
선언 class Sample {
    int n;
    void g() {...}
}
class Sample {
    static int m;
    static void f() {...}
}
공간적 특성 멤버는 객체마다 별도 존재
-인스턴스 멤버
멤버는 클래스당 하나 생성
- 멤버는 객체 내부가 아닌 별도의 공간(클래스 코드가 적재되는 메모리)에 생성
- 클래스 멤버라고 부름
시간적 특성 객체 생성 시에 멤버 생성됨
- 객체가 생길 때 멤버도 생성
- 객체 생성 후 멤버 사용 가능
- 객체가 사라지면 멤머도 사라짐
클래스 로딩 시에 멤버 생성
- 객체가 생기기 전에 이미 생성
- 객체가 생기기 전에도 사용 가능
- 객체가 사라져도 멤버는 사라지지 않음
- 멤버는 프로그램이 종료될 때 사라짐
공유의 특성 공유되지 않음
- 멤버는 객체 내에 각각 공간 유지
동일한 클래스의 모든 객체들에 공유됨

 

static 활용

전역 변수와 전역 함수를 만들 때 활용

- 전역변수나 전역 함수는 static으로 클래스에 작성
 

공유 멤버를 작성할 때

- static 필드나 메소드는 하나만 생성
- 클래스의 객체들 공유
 

static 메소드의 제약 조건

static 메소드는 non-static 멤버 접근할 수 없음
객체가 생성되지 않는 상황에서도 static 메소드는 실행 -> non-static 메소드와 필드 사용 불가
반대로 non-static 메소드는 static 멤버 사용 가능
 
static 메소드는 this 사용불가
static 메소드는 객체가 생성되지 않은 상황에서도 호출이 가능하므로, 현재 객체를 가리키는 this 레퍼런스 사용할 수 없음
 

final

final 클래스

클래스 상속 불가
 

final 메소드

오버라이딩 불가
 

final 필드

상수를 선언할 때 사용

class SharedClass {
    public static final double PI = 3.14;
}

선언 시 초기 값 지정
실행 중 값 변경 불가

728x90
반응형