< 필드 >
- 객체의 고유 데이터, 부품 객체, 상태 정보를 저장하는 곳
· 객체가 자동차면 제조회사, 모델, 색깔, 현재속도, 차체, 엔진, 타이어 등이 필드가 될 수 있다
① 필드 선언
- 데이터타입 필드명 [ = 초기값] ;
String company; // null로 초기화
String model = "그랜저";
int maxSpeed; // 0으로 초기화
boolean engineStart; // false로 초기화
· 필드 선언시 초기값을 지정해도 되고 생략해도 된다
· 초기값 생략시 자동으로 기본 초기값으로 설정
- 필드 선언은 클래스 { } 블록 안 어디서든 / 생성자 선언과 메소드 선언 앞 뒤 가능
- 하지만 생성자와 메소드 { } 블록 내부에서는 선언 불가능 → 변수와 다른점 !
- 선언형태가 변수와 비슷하지만 필드와 변수는 다르다
② 필드 사용
- 필드값을 읽고 변경하는 작업
- 클래스 외부에서 사용할 경우 먼저 클래스부터 객체를 생성한 뒤 필드 사용
∵ 객체가 존재해야 필드가 존재하기 때문
public class Car{
//필드
int speed;
//생성자
Car(){
speed = 0;
}
//메소드
void method(...){
speed = 10;
}
}
public class Person{
void method(){
//Car 객체 생성 우선
Car myCar = new Car();
// 필드 사용
myCar.speed = 60;
}
}
- 도트(.)연산자는 객체 접근 연산자로 객체가 가지고 있는 필드나 메소드를 사용하고자 할 때 사용
< 생성자 >
- new 연산자로 클래스로부터 객체를 생성할 때 호출되어 객체 초기화 담당
· 객체 초기화 : 필드를 초기화하거나 메소드를 호출해서 객체 사용할 준비
- 메소드와 비슷한 모양이나 리턴 타입 없고 클래스 이름과 동일
① 기본 생성자
- [public] 클래스명(){ }
- 클래스 내부에 생성자 선언 생략시 블록 { } 이 비어있는 기본 생성자 바이트코드에 자동 추가
- 모든 클래스는 생성자가 반드시 존재하고 하나 이상 가질 수 없음
Car myCar = new Car();
· Car()가 기본 생성자
② 생성자 선언
- 클래스이름과 동일해야한다
- 클래스명 ( [매개변수 선언,] ... ) { }
· 매개변수 선언은 생략할 수 있고 복수도 가능
public class Car{
// 생성자
Car(String color, int cc){}
}
public class CarExample{
public static void main(String[] args){
// 생성자 호출
Car myCar = new Car("검정", 3000);
}
}
③ 필드 초기화
- 방법1) 필드 선언할 때 초기값 주기
· 동일한 클래스로부터 생성되는 객체들은 모두 같은 값 가짐
public class Korean {
String nation = "대한민국";
String name;
String ssn;
}
Korean k1 = new Korean();
Korean k2 = new Korean();
→ Korean 클래스로부터 생성한 객체 k1, k2의 nation은 "대한민국"임
- 방법2) 생성자에서 초기값 주기
· 객체 생성 시점에 외부에서 제공되는 값들로 초기화할 때
public class Korean{
// 필드
String nation = "대한민국";
String name;
String ssn;
// 생성자
public Korean(String n, String s){
name = n;
ssn = s;
}
}
Korean k1 = new Korean("홍길동", "1234-5678");
Korean k2 = new Korean("김길동", "5678-9012");
→ 호출될 때 초기값 가짐
④ this.
- 객체 자신의 참조
- 매개변수 사용시 통상적으로 필드와 동일한 이름을 갖는 매개변수 사용
- 필드와 매개변수가 이름이 동일하면 매개변수 우선순위가 더 높다
- 생성자 내부의 필드에 접근하기 위해서 this.필드 사용
// 생성자
public Korean(String name, String ssn){
this.name = name;
this.ssn = ssn;
}
· 왼쪽이 필드 오른쪽이 매개변수
⑤ 생성자 오버로딩
- 매개변수를 달리하는 생성자를 여러 개 선언
- 매개변수 타입과 갯수에 의해서 구분되고 호출될 생성자 결정
public class Car{
Car() { ... }
Car(String model) { ... }
Car(String model, String color) { ... }
Car(String model, String color, int speed) { ... }
}
Car car1 = new Car();
Car car2 = new Car("티볼리");
Car car3 = new Car("티볼리", "하얀색");
Car car4 = new Car("티볼리", "하얀색", 300);
Car(String model, String color){ ... }
Car(String color, String model){ ... }
· 매개변수 타입과 갯수가 같기때문에 순서가 달라도 생성자 오버로딩이 아님
⑥ this()
- 생성자에서 다른 생성자를 호출할 때 사용
- 반드시 생성자의 첫 줄에만 허용
- this()의 매개값은 호출되는 생성자의 매개변수에 맞게 제공
Car(String model){
this.model = model;
this.color = "은색";
this.speed = 250;
}
Car(String model, String color, int speed){
this.model = model;
this.color = color;
this.speed = speed;
}
· this. - 중복코드가 제거를 위해 this() 생성자 사용해보면
Car(String model){
this(model, "은색", 250);
}
Car(String model, String color, int speed){
this.model = model;
this.color = color;
this.speed = speed;
}
· this(model, "은색", 250) 생성자가 Car(String model, String color, int speed) 호출하는거임
'자바 웹 개발자가 될거야 > JAVA' 카테고리의 다른 글
[JAVA] 멀티스레드 / 멀티스레드로 구구단 구현 (0) | 2021.12.09 |
---|---|
[JAVA] Scanner 클래스 / File 클래스 / 멀티 스레드 (0) | 2021.12.06 |
이클립스 워크스페이스 기본 경로 변경 / 프로젝트 익스플로어 창 사라졌을 때 (0) | 2021.11.19 |
[JAVA] 중첩클래스 / 인스턴스 멤버 클래스 / 정적 멤버 클래스 / 로컬 클래스 / 중첩클래스 참조 (0) | 2021.11.18 |
[JAVA] 메서드 / 리턴문 / 메서드 호출 / 메서드 오버로딩 (0) | 2021.11.03 |