hhnn_soph
[Java] 클래스 구성 요소(필드 및 생성자) 본문
클래스의 구성 멤버는 필드, 생성자, 메서드 3가지! 해당 멤버들은 생략되거나 여러 개 작성될 수 있다.
public class ClassName {
// 필드
int fieldName;
// 생성자
ClassName(){
}
// 메서드
void methodName(){
}
}
📙 필드(Field)
객체의 고유 데이터가 저장되는 곳
1. 필드 선언
- 클래스 { } 블록 내부 어디서든 선언 가능
- 생성자와 메서드 전체에서 사용되며 객체가 소멸되지 않은 한 객체와 함께 존재
- 선언 형태는 변수와 비슷하지만 변수라고 부르지 않음
- 필드의 초기값은 필드 선언 시 주어질 수도 있고 생략될 수도 있음
: 초기값 생략된 경우, 객체 생성 시 자동으로 기본 초기값(0, 0.0, false, null) 설정됨
// 설명
데이터타입 필드명;
데이터타입 필드명 = 초기값;
// ex. 자동차 클래스
public class Car {
// 초기값 설정
String company = "현대자동차";
String model = "그랜져";
int maxSpeed = 300;
// 초기값 미설정
int productionYear;
boolean engineStart;
// 클래스 타입
Body body;
Engine engine;
Tire tire;
}
2. 필드 사용
- 필드 값을 읽고 변경하는 작업
- 클래스 외부에서 사용하고자 하면 우선 객체 생성해야 함
- 객체 생성 후 도트( . ) 연산자를 통해 필드에 접근
public class CarExample {
public static void main(String[] args){
// 객체생성
Car myCar = new Car();
// 필드값 읽기
System.out.println("제작회사: " + myCar.company);
System.out.println("모델명: " + myCar.model);
// 필드값 수정
myCar.productionYear = 2021;
System.out.println("제작연도: " + myCar.productionYear);
}
}
// 실행결과
제작회사: 현대자동차
모델명: 그랜져
제작연도: 2021
3. 필드 초기화 방법
1) 필드 선언 시 초기값 주기(위의 방법으로)
: 동일한 클래스로부터 생성되는 객체들은 모두 같은 데이터를 가짐
2) 생성자에서 초기값 주기(다음 내용 참고)
📙 생성자(constructor)
- 모든 클래스는 생성자가 반드시 존재하며 new 연산자로 호출됨
- 객체 생성 시 초기화를 담당하여 필드 초기화 혹은 메서드 호출하여 객체를 사용할 준비함
- 생성자를 실행시키지 않고 클래스로부터 객체 생성 불가
1. 기본 생성자(Default Constructor)
- 가장 기본이 되는 형태
[public] 클래스명( ) { } |
public class Car {
// 기본생성자
public Car () {
}
}
- 생성자 선언 생략 시 컴파일러가 기본 생성자를 바이트 코드에 자동 추가
- 클래스의 접근 제한자가 public이면 생성자에도 작성. 없다면 생성자에도 생략.
- 명시적으로 선언한 생성자가 1개라도 있으면 컴파일러는 기본 생성자 추가하지 않음
2. 생성자 선언
- 메서드와 비슷하지만 리턴 타입 없고 클래스 이름과 동일
- 객체를 다양하게 초기화하기 위해 명시적으로 생성자를 선언할 수도 있음
- 생성자 내 매개 변수 선언은 생략 혹은 여러 개 선언 가능
- 매개변수
: new 연산자로 생성자 호출 시 외부의 값을 생성자 블록 내부로 전달
: 매개변수명은 필드와 동일한 이름 사용
: 매개변수명과 필드명이 동일하기 때문에 필드 앞에 this. 를 붙여 명시
// 생성자 선언
public class Car {
// 필드선언
String model;
String color;
int maxSpeed;
// 명시된 생성자
public Car(String model, String color, int maxSpeed) {
this.model = model;
this.color = color;
this.maxSpeed = maxSpeed;
}
}
3. 필드 초기화
- 객체 생성 시점에서 외부에서 제공되는 매개변수 값으로 초기화함
- 중요한 몇 개 필드만 매개변수 통해 초기화하기
// 생성자를 호출해 객체 생성 및 초기화
public class CarExample{
public static void main(String[] args){
Car myCar = new Car("그랜저", "검정", 300);
// 생성자가 명시된 경우, 기본 생성자가 자동생성되지 않기 때문에
// 기본 생성자 호출 불가
// Car myCar = new Car();
}
}
4. 생성자 오버 로딩(Overloading)
- 매개 변수를 달리하는 생성자를 여러 개 선언하는 것
- 외부의 다양한 데이터 이용해 객체 초기화하기 위해 생성자도 다양화한 것
- 선언한 생성자의 개수만큼 선택하여 활용할 수 있음
public class Car {
public Car() { ... }
public Car(String model) { ... }
public Car(String model, String color) { ... }
public Car(String model, String color, int maxSpeed) { ... }
}
- 주의 : 매개 변수 타입, 개수, 순서가 같을 경우 오버 로딩이 아님
public class Car {
public Car(String color, String model) { ... }
public Car(String model, String color) { ... }
}
5. 다른 생성자 호출
- 매개 변수의 수만 달리하고 필드 초기화 내용이 비슷한 생성자에서 사용 (오버 로딩)
- this( ) : 반드시 생성자의 첫 줄에서 사용
- this( ) 다음엔 추가적인 실행문 작성하여 진행할 수 있음
public class Car {
String model;
String color;
int maxSpeed;
// 생성자
public Car() {
}
public Car(String model) {
this(model, "은색", 250);
}
public Car(String model, String color) {
this(model, color, 250);
}
//호출된 생성자(공통실행코드)
public Car(String model, String color, int maxSpeed) {
this.model = model;
this.color = color;
this.maxSpeed = maxSpeed;
}
}
'Language > Java' 카테고리의 다른 글
[Java] 클래스 구성 요소(메서드) (0) | 2021.09.13 |
---|---|
[Java] 자바 클래스 선언 및 객체 생성 (0) | 2021.09.13 |
[Java] 자바 객체 지향 프로그래밍이란? (0) | 2021.09.13 |