반응형
접근 제어자
=> 클래스, 변수, 메서드 등의 접근 가능한 범위를 지정하는 데 사용
- 객체 지향의 특징인 '정보 은닉'을 위해 제공되는 기능, 접근 권한을 구체화 할 수 있음
- public
- 외부로 공개되며, 해당 객체를 사용하는 프로그램 어디에서나 직접 접근할 수 있음
- protected
- 부모 클래스에 대해서는 public처럼 취급되고, 외부에서는 private멤버처럼 취급
- 같은 클래스, 같은 패키지, 자식클래스(다른패키지)에서 접근 가능
- default
- 접근 제어의 기본값, 같은 클래스, 같은 패키지에 속하는 멤버만 접근 가능
- private
- 외부에 공개되지 않고, 직접 접근할 수 없는 클래스 멤버 => 해당 객체의 public 메소드를 통해 접근
- 해당 멤버를 선언한 클래스에서만 접근 가능
접근제어자 | 같은 클래스 멤버 | 같은 패키지 멤버 | 자식클래스 멤버 | 그 외 영역 |
public | o | o | o | o |
protected | o | o | o | x |
default | o | o | x | x |
private | o | x | x | x |
static
=> 'static' 키워드는 클래스 수준에 정적 변수와 메서드를 선언할 때 사용되며, 객체의 인스턴스와는 독립적으로 사용됨
- '정적인, 고정된' => static이 붙는 변수나 메서드는 어떤 객체에 소속되는 것이 아닌 클래스에 고정되어 있는 것
- 메모리에 고정적으로 할당, 메모리의 static 영역에 적재되고 프로그램이 종료될 때 해제됨
- static이 붙지 않으면 객체가 생성될 때마다 호출 => 각 객체들에서 공통적으로 하나의 값이 유지되어야 할 경우 static 사용
- 객체 생성 없이 사용 가능, static 메서드 내에서는 인스턴스 변수를 사용할 수 없음
- main함수를 static으로 구현하여 바로 실행할 수 있도록 해줌
- static이 과도하게 많을 경우 메모리 과부화 가능, 테스트가 어려울 수 있고, 오버라이딩이 불가능
- 특정 클래스나 인스턴스에 종속되지 않고, 재사용이 가능하며, 범용 기능을 제공하는 유틸리티성 메서드에 사용
- final을 앞에 붙이면 그 값을 변경할 수 없음
객체와 클래스
=> 클래스는 객체를 만들기 위한 설계도이며, 객체는 그 설계도에 다라 만들어진 실제 사물이나 개념. 객체지향프로그래밍에 코드 재사용성을 높이고, 프로그램 구조를 체계적으로 관리할 수 있도록 해줌.
- 클래스
- 객체를 생성하기 위한 템플릿의 역할, 객체의 속성(상태)과 행동(메소드)을 정의함
- class 키워드 사용
- JVM메모리의 클래스 영역에 로드됨
- 객체
- 자신의 속성을 가지고 있고, 다른것과 식별 가능한 것
- 클래스에 정의된 속성과 행동을 가지고 있는 인스턴스, 클래스를 기반으로 메모리에 할당된 실체
- 클래스의 인스턴스화
- new키워드로 생성
//클래스
class Car{
Striing color;
void drive(){
System.out.println("Driving");
}
}
Car myCar = new Car(); //객체
'공부 기록 > 개념정리' 카테고리의 다른 글
Socket ? WebSocket ? Socket.IO ? 봐도 봐도 어려운 소켓 (1) (3) | 2024.12.04 |
---|---|
[객체 지향] JAVA _ interface , abstract (0) | 2024.04.19 |
박싱 vs 언박싱 , 타입 캐스팅 (0) | 2024.04.07 |
인코딩 vs 디코딩 , 직렬화(serialization) (0) | 2024.04.07 |
JVM (자바 가상 머신) (0) | 2024.03.30 |