quilt code
[Java] 클래스 (3) 본문
5. 인스턴스 멤버와 정적 멤버
클래스: 객체의 설계도.
클래스 멤버(필드, 메소드)는 객체에도 포함되어있어야함
| 인스턴스 멤버 | 객체마다 가지고 있는 멤버 |
| 정적 멤버 | 클래스에 위치시키고 객체들이 공유하는 멤버 |
1) 인스턴스 멤버와 this
인스턴스instance 멤버: 객체(인스턴스)를 생성한 후 사용할 수 있는 필드와 메소드
① 인스턴스 멤버 선언
| public class car { //필드 int gas; //메소드 void setSpeed(int speed) { ... } } >>gas 필드와 setSpeed()메소드는 인스턴스 멤버이기 때문에 외부 클래스에서 사용하기 위해서는 Car 객체(인스턴스)를 생성하고 참조 변수 myCar 또는 yourCar로 접근해야함 |
| Car myCar = new Car(); myCar.gas = 10; myCar.setSpeed(60); Car yourCar = new Car(); yourCar.gas = 20; yourCar.setSpeed(80); |
② this
- 객체 외부에서 인스턴스 멤버에 접근하기 위해 참조 변수를 사용하는 것과 마찬가지로 객체 내부에서도 인스턴스 멤버에 접근하기 위해 this 사용할 수 있음
- this.model은 자신이 가지고 있는 model 필드라는 뜻
| Car(String model) { this.model = model; } void setModel(String model) { this.model = model; } >>매개변수 model의 값을 필드 model에 저장 |

| public class CarExample { public static void main(String[] args) { Car myCar = new Car("포르쉐"); Car yourCar = new Car("벤츠"); myCar.run(); yourCar.run(); } } |
2) 정적 멤버와 static
정적 멤버: 클래스에 고정된 멤버로서 객체를 생성하지 않고 사용할 수 있는 필드와 메소드
① 정적 멤버 선언: 필드와 메소드 선언할 때 static 키워드를 추가적으로 붙이면 됨
| public class 클래스 { //정적 필드 static 타입 필드 [= 초기값]; //정적 메소드 static 리턴 타입 메소드( 매개변수선언, ... ) { ... } } |
② 정적 멤버 사용
- 클래스가 메모리로 로딩되면 정적 멤버를 바로 사용할 수 있는데, 클래스 이름과 함께 도트(,)연산자로 접근
- 클래스.필드; 클래스.메소드( 매개값, ... );
ex)
| public class Calculator { static double pi = 3.14159; static int plus(int x, int y) { ... } static int minus(int x, int y) { ... } } |
| double result1 = 10 * 10 * Calculator.pi; int result2 = Calculator.plus(10, 5); int result3 = Calculator.minus(10, 5); |


**주의할 점**
- 객체가 없어도 실행된다는 특징 때문에 정적 메소드를 선언할 때는 이들 내부에 인스턴스 필드나 인스턴스 메소드를 사용할 수 x
- 객체 자신의 참조인 this 키워드도 사용 x
3) 싱글톤
- 단 하나의 겍체만 만들도록 보장해야 하는 경우-> 하나만 생성됨 -> 싱글톤
- 클래스 외부에서 new 연산자로 생성자를 호출할 수 없도록 막아야함 (why? 생성자를 호출한 만큼 객체가 생성되기 때문)
- 생성자를 외부에서 호출할 수 없도록 하려면 생성자 앞에 private을 붙여줌
- 자신의 타입인 정적 필드를 하나 선언하고 자신의 객체를 생성해 초기화함
- 클래스 내부에서는 new 연산자로 생성자 호출이 가능함
4) final 필드와 상수
① final 필드 :
- 초기값이 저장되면 이것이 최종적인 값이 되어서 프로그램 실행 도중 수정할 수 x
- final 타입 필드 [=초기값];
- final 필드의 초기값을 줄 수 있는 방법 (필드 선언 시에 주는 방법 / 생성자에서 주는 방법)
② 상수:
- 불변의 값 static fina, 원주율 파이, 지구의 무게 및 둘레->불변의 값을 저장하는 필드를 자바에서는 상수라고 함
- final 필드 =/= 상수
6. 패키지와 접근 제한자
- 패키지 사용이유? 클래스를 체계적으로 관리하기 위해
- 패키지: 파일 시스템의 폴더 기능 + 클래스의 일부분으로서 클래스를 유일하게 만들어주는 식별자 역할
- 상위패키지.하위패키지.클래스
- 패키지 이름 규칙: 숫자로 시작x, _,$을 제외한 특문 사용 불가. java로 시작하는 패키지 불가. 모두 소문자로 작성
1) import 문
사용하고자 하는 클래스 또는 인터페이스가 다른 패키지에 소속되어 있다면 import 문으로 해당 패키지의 클래스 또는 인터페이스를 가져와 사용할 것임을 컴파일러에게 알려줘야함 (같은 패키지에 있으면 안써도 ok)
| import 상위패키지.하위패키지.클래스이름; import 상위패키지.하위패키지.*; |
import문은 패키지 선언과 클래스 선언 사이에 작성
2) 접근 제한자
접근을 제한하기 위해 사용 (접근: 클래스 및 인터페이스 그리고 이들이 가지고 있는 멤버의 접근)
| public 접근 제한자 | 외부 클래스가 자유롭게 사용할 수 있음 |
| protected 접근 제한자 | 같은 패키지 또는 자식 클래스에서 사용됨 |
| private 접근 제한자 | 외부에서 사용될 수 없음 |
위 세가지 접근 제한자가 적용되지 않으면 default 접근 제한을 가짐
*default 접근 제한: 같은 패키지에 소속된 클래스에서만 사용
'daily > Java' 카테고리의 다른 글
| [Java] 상속 (0) | 2023.01.16 |
|---|---|
| [Java] 클래스 (4) (0) | 2023.01.11 |
| [Java] 클래스 (2) (0) | 2023.01.03 |
| [Java] 클래스(1) (0) | 2023.01.02 |
| [Java] 참조타입 과제 (0) | 2023.01.02 |