객체는 속성(필드) 과 행위(메서드) 로 구성
ex ) 자동차
속성 : 회사, 모델, 색상, 가격, 속도 등
행위 : 가속, 브레이크, 기어 변속, 조명, 경적 등
현실 세계에 있는 객체를 소프트웨어의 객체로 설계하는 것을 ‘객체 모델링’
객체 간의 관계
사람 객체는 자동차 객체를 사용
타이어 객체, 차 문 객체, 핸들 객체는 자동차 객체에 포함
자동차와 기차 객체는 하나의 공통된 기계 시스템 객체를 토대로 만들어진다고 가정하면 자동차 객체와 기차 객체는 기계 시스템 객체를 상속받는 상속관계가 됨
객체지향 프로그래밍의 특징
캡슐화
- 캡슐화란 속성(필드)와 행위(메서드)를 하나로 묶어 객체로 만든 후 실제 내부 구현 내용은 외부에서 알 수 없게 감추는 것을 의미.
- 외부 객체에서는 캡슐화된 객체의 내부 구조를 알 수 없기 때문에 노출시켜 준 필드 혹은 메서드를 통해 접근할 수 있음.
- 필드와 메서드를 캡슐화하여 숨기는 이유는 외부 객체에서 해당 필드와 메서드를 잘못 사용하여 객체가 변화하지 않게 하는 데 있음.
- Java에서는 캡슐화된 객체의 필드와 메서드를 노출시킬지 감출지 결정하기 위해 접근 제어자를 사용.
상속
- 각각의 객체들을 상속 관계로 묶음으로써 객체 간의 구조를 파악하기 쉬워짐.
- 필드와 메서드를 변경하는 경우 부모 객체에 있는 것만 수정하게 되면 자식 객체 전부 반영이 되기 때문에 일관성을 유지하기 좋음.
- 자식 객체가 부모 객체의 필드와 메서드를 물려받아 사용할 수 있기 때문에 코드의 중복이 줄어들며 코드의 재사용성이 증가.
다형성
객체가 연산을 수행할 때 하나의 행위에 대해 각 객체가 가지고 있는 고유한 특성에 따라 다른 여러 가지 형태로 재구성되는 것을 의미
추상화
객체에서 공통된 부분들을 모아 상위 개념으로 새롭게 선언하는 것
클래스 설계
클래스 만들기 4단계
1. 클래스 (설계도) 선언
public class Car {}
공개된 자동차 클래스 선언을 의미
2. 클래스의 필드 정의
String company; // 자동차 회사
String model; // 자동차 모델
String color; // 자동차 색상
double price; // 자동차 가격
double speed; // 자동차 속도 , km/h
char gear; // 기어의 상태, P,R,N,D
boolean lights; // 자동차 조명의 상태
3. 클래스의 생성자 정의
public Car() {}
- 자동차 객체의 생성 방식을 선언
- 생성자는 반호나 타입이 없고 이름은 클래스의 이름과 동일
- 괄호() 안에 아무것도 없는 생성자를 기본 생성자라고 함
4. 클래스의 메서드 정의
// gasPedal
double gasPedal(double kmh, char type) {
changeGear(type); // 가속도 페달을 밟으면 자동으로 기어가 변한다
speed = kmh;
return speed;
}
// brakePedal
double brakePedal() {
speed = 0;
return speed;
}
// changeGear
char changeGear (char type) {
gear = type;
return gear;
}
// onOffLight
boolean onOffLights () {
lights = !lights;
return lights;
}
// horn
void horn () {
System.out.println("빵빵!");
}
// 자동차의 속도 .. 가변길이 메서드
void carSpeeds (double ... speeds) {
for (double v : speeds) {
System.out.println("v = " + v);
}
입력값이 없는 경우, 반환 값이 없는 경우, 입력값이 여러 개인 경우 등 등 다양하게 메서드를 선언할 수 있다.
객체 생성과 참조형 변수
객체 생성
참조형 변수
클래스를 만들었으니 객체를 생성할 수 있다. ( = 인스턴스화 )
Car car = new Car(); // 객체 생성 ( 인스턴스화 )
- new 연산자를 통해서 객체가 생성되면 해당 인스턴스의 주소가 반환되기 때문에 해당 클래스의 참조형 변수를 사용하여 받아줄 수 있다.
객체 배열
객체를 배열로도 만들 수 있다.
public class Main {
public static void main(String[] args) {
Car[] carArray = new Car[3];
Car car1 = new Car();
car1.changeGear('P');
carArray[0] = car1;
Car car2 = new Car();
car2.changeGear('N');
carArray[1] = car2;
Car car3 = new Car();
car3.changeGear('D');
carArray[2] = car3;
for (Car car : carArray) {
System.out.println("car.gear = " + car.gear);
}
}
}
// 출력
//car.gear = P
//car.gear = N
//car.gear = D
'컴퓨터 프로그래밍 > Java' 카테고리의 다른 글
[Java] 인스턴스 멤버와 클래스 멤버 (0) | 2024.07.26 |
---|---|
[Java] 필드와 매서드 (0) | 2024.07.26 |
[Java] Level 1 과제 중 추가로 알게된 점 정리하기 (1) | 2024.07.25 |
[Java] 컬렉션 ( ArrayList, LinkedList, Stack, Queue, Set, Map ) (3) | 2024.07.24 |
[Java] 배열 (2) | 2024.07.24 |