본문 바로가기

Java

좋은 객체지향이란?

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