728x90
반응형
접근지정자
- public: 어떤 클래스에서든 접근 가능
- protected: 같은 패키지에 있는 다른 클래스나, 상속받은 자식 클래스에서 접근 가능
- private: 해당 클래스 내부에서만 접근 가능
- default(package-private): 같은 패키지 내에서만 접근 가능, 따로 접근 지정하지 않았을 경우 자동으로 지정
접근지정자는 객체지향 프로그래밍에서 캡슐화를 구현
클래스 내부 상태와 행동을 적절히 제어
코드의 유지 보수성과 재사용성 향상
클래스 접근 지정
public class World { // 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
반응형
'전공 > 객체지향프로그래밍' 카테고리의 다른 글
[객체지향프로그래밍][Java] 상속 3 (추상 메소드, 추상 클래스, 인터페이스) (0) | 2023.05.08 |
---|---|
[객체지향프로그래밍][Java] 상속 2 (오버라이딩) (0) | 2023.04.27 |
[객체지향프로그래밍][Java] 상속 1 (객체 생성, 접근 지정자, 업캐스팅, 다운캐스팅, instanceof 연산자) (0) | 2023.04.27 |
[객체지향프로그래밍][Java] 클래스와 객체 1 (클래스의 구성, 생성자, this, 객체 배열, 오버로딩, 가비지 컬렉션) (0) | 2023.04.18 |
[객체지향프로그래밍] 이론 (0) | 2023.04.17 |