HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🍗
[New] 조규현팀
/
🏪
TS Store
/
OOP 4대 원칙

OOP 4대 원칙

Person
완료율%
상태
완료
나의 블로그
Think Sharing (TS)
🌞
OOP 4대 원칙

OOP 4대 특성

 

추상화

  • 객체들의 공통적인 특징(속성, 기능을) 묶어 표현하는 것
  • 현실 세계의 복잡성을 단순화하여 객체를 바라볼 수 있게 한다.
 

캡슐화

  • 관련있는 속성과 기능을 하나로 묶는 것, 외부에서 반드시 접근해야만 하는 행위를 인터페이스를 통해 노출 시킨다.(정보은닉)
  • 속성을 스스로 관리할 수 있도록 함으로써 자율적인 객체를 만들 수 있게 된다.
  • 완전한 자율적인 객체는 내부의 변경이 외부에 영향을 끼치지 않는다.
 

캡슐화의 잘못된 예

남은 연료와 연료통의 용량을 Car가 직접 계산하여 주행가능 여부를 판단
public class Car { private Fuel fuel; private int efficiency; public void run() { if((fuel.getAmount() - efficiency) / fuel.getMaxCapacity()* 100 > 10) { System.out.println("run"); } else { System.out.println("can't run"); } } } public class Fuel { private double amount; private double maxCapacity; public double getAmount() { return amount; } public double getMaxCapacity() { return maxCapacity; } }
 
연료가 고체 연료가 바뀐다고 가정을 하면?
  • 연료 뿐만아니라 Car도 바꿔야한다. → 변경점이 늘어나 유지보수가 어렵다!
public class ChangedFuel { private int quantity; private int maxCapacity; public int getQuantity() { return quantity; } public int getMaxCapacity() { return maxCapacity; } }
notion image
 
캡슐화의 올바른 예
  • 연료의 내부 구현을 감추고 효율값을 넘겨주며 충분한지 물어보고 있음
package goodCapsulation; public class Car { private Fuel fuel; private int efficiency; public Car(Fuel fuel) { this.fuel = fuel; } public void run() { if(fuel.isEnough(efficiency)) { System.out.println("run"); } else { System.out.println("can't run"); } } } public class Fuel { private double amount; private double maxCapacity; public boolean isEnough(int efficiency) { return (amount - efficiency) / maxCapacity * 100 > 10; } }
 
연료가 고체 연료로 바뀌었을 때를 가정해보면…
public class ChangedFuel { private int quantity; private int maxCapacity; public boolean isEnough(int efficiency) { return efficiency - (quantity / maxCapacity * 100) > 0; } }
 
핵심 로직에는 변화가 없다..!
notion image
Fuel을 isEnough() 추상메서드를 포함하는 추상클래스 또는 인터페이스로 사용하면 더욱 더 좋을 듯 합니다...!
 

상속

  • 슈퍼 타입의 특징을 서브 타입이 물려받는 것
  • 비용, 시간 절감
  • 서브 타이핑
    • 서브 클래스가 슈퍼 클래스를 대체할 수 있는 경우
    • 설계의 유연성이 주 목적
    • 인터페이스 상속이라고도 함
  • 서브 클래싱
    • 서브 클래스가 슈퍼 클래스를 대체할 수 없는 경우
    • 중복제거, 재 사용성이 주 목적
    • 구현 상속이라고도 함
 

다형성

  • 같은 메시지에 서로 다른 응답을 할 수 있는 특성
  • 오버로딩
    • 함수이름, 반환형이 같지만 매개 변수가 다른 경우
      • notion image
  • 오버라이딩
    • 슈퍼 클래스의 메서드를 하위 클래스에서 재정의하여 사용
      • notion image