728x90
객체지향은 객체의 모임을 통해 유연하고, 변경이 용이한 구조로 개발하는 방법론이다.
추상화
- 불필요한 코드를 제거하고 중요한 부분을 살림
- 대표적으로 사물간의 공통점을 취하는 일반화가 있음
- 자동차의 공통점 move를 추상화한 사례
public abstract class Car {
public abstract void move();
}
public class FastCar extends Car{
@Override
public void move() {
System.out.println("빠르게 달립니다.");
}
}
public class SnowCar extends Car {
@Override
public void move() {
System.out.println("겨울에 잘 달립니다.");
}
}
public class SuperCar extends Car {
@Override
public void move() {
System.out.println("슈퍼하게 달립니다.");
}
}
캡슐화
- 은닉화를 통해 결합도를 낮추고 높은 응집도를 유지함
- 데이터를 꺼내는 것이 아니라 메시지를 전달하는 구조
- 사람이든 로봇이든 일단 showHungryStatus으로 상태를 알 수 있다
public class Human {
private final BioCell bioCell;
public YeeSan(int capacity) {
this.bioCell = new BioCell(capacity);
}
public void showHungryStatus() {
bioCell.showHungryStatus();
}
}
public class Robot {
public final int capacity;
public BioCell(int capacity) {
this.capacity = capacity;
}
public void showHungryStatus() {
if (capacity == 0) {
System.out.println("로봇 배가 고프다.");
} else if (capacity <= 5) {
System.out.println("로봇 약간 배가 고프다");
} else {
System.out.println("로봇 배부르다.");
}
}
}
상속
- 공통점을 상속시키는 것
public class Boy extends Student {
public Boy(String name) {
super(name);
}
public void run() {
System.out.println("[" + name + "] 뛰고 있습니다.");
}
}
public class Girl extends Student {
public Girl(String name) {
super(name);
}
public void walk() {
System.out.println("[" + name + "] 걷고 있습니다.");
}
}
다형성
- 가장 중요한 요소
- 하나의 객체에 여러가지 타입을 대입
- Spring에서 인터페이스를 나두고 서버단에서 확장할 수 있게 만드는 개념
- 오버로딩과 오버라이딩 방식이 있음
- 같은 호랑이라도 다른 자료형을 가질 수 있음
Tiger tiger = new Tiger(); // Tiger is a Tiger
Animal animal = new Tiger(); // Tiger is a Animal
Predator predator = new Tiger(); // Tiger is a Predator
Barkable barkable = new Tiger(); // Tiger is a Barkable
300x250
'Java' 카테고리의 다른 글
람다 표현식 (0) | 2023.07.09 |
---|---|
Java의 함수형 인터페이스 (0) | 2023.07.09 |
함수형 인터페이스와 람다 표현식 (0) | 2023.07.06 |
비즈니스 요구사항 설계 (0) | 2022.07.20 |
SOLID (0) | 2022.07.19 |