안녕하세요!
이번 포스팅은 자바 클래스와 객체에 대해서 자세히 알아보겠습니다.

1, 클래스 선언 및 구성 요소
1) 필드(field)
- 객체의 속성을 나타냄. 멤버 변수라고도 함.
- 보통 필드는 캡슐화를 위해 private으로 지정하고, 외부 접근을 불가하도록 함.
대신 필요한 경우에 한해서 setter와 getter를 통해 필드를 다루는 것이 일반적
* 특히 setter는 필드값을 외부에서 변경할 수 있도록 하는 메서드를 말하는데,
setter는 반드시 필요한 경우에만 만들고 가능하다면 불변성을 유지하기 위해 만들지 않는 것이 더 좋음
* 필드 VS 지역 변수 차이
- 지역 변수 : 메서드 내부에 선언된 변수. 매개 변수도 일종의 지역 변수임.
필드는 기본값이 있지만, 지역 변수는 기본값이 없어 반드시 초기화
필드는 클래스 전체에서 사용 가능. 지역 변수는 선언된 블록 내부에서만 사용 가능


2) 메서드(method)
- 객체의 동작(객체가 수행할 수 있는 행동을 정의)을 나타냄
- 아래 4)번의 예시 코드에서 getArea(), getVolume() 등처럼 클래스 내부에서 메서드를 정의
- 객체의 필드를 이용해 계산하거나 동작을 수행
* 연속 호출(메서드 체이닝)
- 여러 개의 메서드를 호출할 때마다 참조변수.메서드이름() 을 계속해서 작성하게 되면 번거롭고 가독성도 떨어짐. 이러한 문제를 연속 호출을 통해 해결
- 연속 호출이 가능하려면, 각 메서드의 반환값이 다음 메서드를 호출할 수 있는 객체여야 함.
아래와 같은 코드 예시에서는 연속 호출 불가.
연속 호출을 하기 위해서는 setValue() 내부에 return this를 추가하여 객체를 반환한다면 가능

3) 생성자
- 클래스에 생성자를 하나도 정의하지 않으면, 자바가 매개변수가 없는 기본 생성자를 자동으로 만들어줌.
하지만 매개변수가 있는 생성자를 작성하면 기본 생성자는 자동 생성되지 않으므로 필요한 경우 직접 작성해야 함.
- 생성자를 통해 객체 생성 시, 매개변수도 같이 입력받아서 private 필드를 초기화
* 선언 방법 : public 클래스 이름 ( ) { }
(일반적으로 공개되어야 하므로 public으로 선언되지만 아닐 수도 있음)
* 생성자 사용
[클래스 이름] 변수 = new 클래스 이름 ( ) ;
- 생성자 이름은 클래스 이름과 동일
- 생성자의 반환 타입은 없음
- 생성자는 new 연산자와 함께 사용. 객체 생성할 때 호출.
- 생성자도 오버로딩 할 수 있음.

디폴트 생성자(box1) : 모든 클래스는 최소한 하나의 생성자가 있음. 만약 생성자를 선언하지 않으면 컴파일러가 자동으로 디폴트 생성자 추가

4) 선언방법 : 접근제어자(public) class [클래스 이름] { }
=> [클래스 이름]은 소스 파일 이름과 동일해야 함.
* 보통 소스 파일마다 하나의 클래스를 선언하지만, 2개 이상의 클래스를 하나의 파일로도 선언 가능
* 하나의 파일에 클래스가 두 개 이상 있다면 하나만 public으로 선언할 수 있고, 해당 클래스 이름은 소스파일 이름과 동일해야 함.


2. 객체 생성과 참조 변수
1) 객체 생성 및 접근
[클래스 이름] 참조변수 = new [클래스 이름] ();
변수 생략하고 new [클래스 이름] (); 으로 객체 생성할 수도 있음.
- 클래스는 참조 타입이므로 참조 변수(참조 타입 변수)를 통해 객체에 접근
=> 객체는 new 연산자를 통해 Heap 영역에 생성되고, 그 객체의 메모리 주소(참조값)가 참조 변수에 저장되어 객체에 접근할 수 있음
- [클래스 이름] 참조 변수 = null; 로 초기화 후 -> new와 기본 생성자로 객체를 생성하여 참조 변수에 할당하는 방법도 있음.
- 참조변수가 참조하는 객체의 getVolume()과 getArea() 메서드를 각각 호출함.
- 만약 멤버변수가 public으로 설정되어 있다면, 외부 클래스에서 해당 객체에 접근 시,
객체참조변수. 필드 (ex. cls.radius) 를 통해 접근할 수 있음.
(클래스 내부에서는 자신의 멤버에 접근하려면 this를 붙이거나 혹은 그냥 this를 생략하고 멤버 이름 그대로 사용)
ex. this.radius / radius
ex. this.getArea() / getArea()

2) 접근자와 설정자
- 클래스 내부에 캡슐화된 멤버(외부 접근 차단)를 외부에서 사용할 필요가 있음.
- private으로 지정된 필드에 값을 반환하는 접근자(getter), 값을 변경하는 설정자(setter)는 공개된 public 메서드
- 일반적으로 접근자는 get, 설정자는 set으로 시작하는 이름을 사용
- public으로 열어둔 메서드를 통해서만 private 필드의 값을 읽거나 수정이 가능
- 필드 이름을 외부와 차단해서 독립시키기 때문에 필드 이름 변경이나 데이터 검증도 가능
- 보통 setter에서 필드와 매개변수 이름이 다르면 this를 생략해서 쓰고, 이름이 같으면 멤버 필드 앞에 this를 붙여서 구분함.

'JAVA' 카테고리의 다른 글
| 자바 JAVA 클래스 상속(extends) 과 오버라이딩 VS 오버로딩 차이 (0) | 2025.11.25 |
|---|---|
| 자바 JAVA 열거 타입 (enum) (0) | 2025.11.23 |
| 자바 JAVA 문자열 String 함수 & 사용법 총 정리 (0) | 2025.11.23 |
| 자바 JAVA 연산자와 자동 형변환 & 오버플로우 / 언더플로우 (1) | 2025.11.23 |
| 자바 JAVA 변수의 타입 정리 (int, long, double, String 등) + 스택과 힙 메모리 (0) | 2025.11.20 |