캡슐화
속성(필드)와 행위(메서드)를 하나로 묶어 객체로 만든 후 외부에서 알 수 없게 감추는 것
상속
부모 객체는 가지고 있는 필드와 메서드를 자식 객체에 물려줘 사용할 수 있도록 한다
다형성
객체가 연산을 할 때 하나의 행위에 대해 객체의 고유한 특성에 따라 여러가지 형태로 재구성
ex) Car: 빵 / Car2: 빠앙 / Car3: 빠아앙
추상화
객체에서 공통된 부분들 모아 상위 개념으로 새롭게 선언
ex) 공통적으로 가지고 있는 가속, 브레이크, 속도 → 자동차라는 객체
public class Car {}
String company; // 자동차 회사
String model; // 자동차 모델
String color; // 자동차 색상
double price; // 자동차 가격
double speed; // 자동차 속도 , km/h
char gear; // 기어의 상태, P,R,N,D
boolean lights; // 자동차 조명의 상태
public Car() {} // 생성자는 반환 타입 X
// 클래스 이름과 동일
double gasPedal(double kmh) {
speed = kmh;
return speed;
}
double brakePedal() {
speed = 0;
return speed;
}
new Car(); // Car클래스 객체 생성
Car car1 = new Car(); // Car클래스의 객체인 car1 인스턴스 생성
Car car2 = new Car(); // Car클래스의 객체인 car2 인스턴스 생성
Car[] carArray = new Car[3];
Car car1 = new Car();
car1.changeGear('P');
carArray[0] = car1;
객체는 참조형 변수와 동일하게 취급되므로 배열이나 컬렉션에도 저장 가능
객체의 데이터 저장하는 역할
필드 사용 방법? = 필드의 값을 변경하거나 읽는 것
Car car = new Car();
-> 참조 변수 car 이용해 외부에서 객체 내부의 필드에 접근해 사용
car.color = "blue";
-> 객체의 내부 필드에 접근 (도트 연산자 사용)
double brakePedal() {
speed = 0;
return speed;
}
메서드 내부에서 객체의 필드 speed 바로 호출해 사용 가능
하나의 메서드 이름으로 여러 기능을 구현하도록 하는 기능
조건
메서드의 이름이 같고 매개변수의 개수, 타입, 순서가 달라야 한다
응답 값만 다른 것은 오버로딩 X
접근 제어자만 다른 것도 오버로딩 X
즉, 매개변수의 차이로만 구현 가능
선언하는 방법에 따라 인스턴스 멤버와 클래스 멤버로 구분
인스턴스 자신!
객체 내부 멤버에 접근하기 위해 사용
public Car(String model, String color, double price) {
model = model;
color = color;
price = price;
}
public Car(String model, String color, double price) {
this.model = model;
this.color = color;
this.price = price;
}
Car returnInstance() {
return this;
}
인스턴스 자신의 생성자 호출
필드 코드의 중복 줄일 때 사용
public Car(String model) {
this.model = model;
this.color = "Blue";
this.price = 50000000;
}
public Car(String model, String color) {
this.model = model;
this.color = color;
this.price = 50000000;
}
public Car(String model, String color, double price) {
this.model = model;
this.color = color;
this.price = price;
}
이러면 코드 중복 ;
public Car(String model) {
this(model, "Blue", 50000000);
}
public Car(String model, String color) {
this(model, color, 100000000);
}
public Car(String model, String color, double price) {
this.model = model;
this.color = color;
this.price = price;
}
// 오류 발생!!!
public Car(String model) {
System.out.println("model = " + model);
this(model, "Blue", 50000000);
}
헷갈리는 내용도 많고 3주차 강의양이 많아서 두차례에 나눠 듣기로 계획을 세웠다.
반도 안들었는데 복잡한 내용이라 머리 아프다.