JAVA

자바 JAVA 클래스(class) 선언과 객체 생성

수진97 2025. 11. 23. 21:03

안녕하세요!

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

 

1, 클래스 선언 및 구성 요소

1) 필드(field)

- 객체의 속성을 나타냄. 멤버 변수라고도 함.

- 보통 필드는 캡슐화를 위해 private으로 지정하고, 외부 접근을 불가하도록 함.

대신 필요한 경우에 한해서 setter와 getter를 통해 필드를 다루는 것이 일반적

 

* 특히 setter필드값을 외부에서 변경할 수 있도록 하는 메서드를 말하는데,

setter는 반드시 필요한 경우에만 만들고 가능하다면 불변성을 유지하기 위해 만들지 않는 것이 더 좋음

 

 

* 필드 VS 지역 변수 차이

- 지역 변수 : 메서드 내부에 선언된 변수. 매개 변수도 일종의 지역 변수임.

 

필드기본값이 있지만, 지역 변수는 기본값이 없어 반드시 초기화

필드클래스 전체에서 사용 가능. 지역 변수 선언된 블록 내부에서만 사용 가능

 

출처 : https://doggzone.github.io/cse2016/notes04.html

 

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를 붙여서 구분함.