백앤드/JAVA

[JAVA] 객체지향 프로그래밍 (OOP,Object Oriented Programming)

영최 2024. 10. 18. 12:50
728x90

1. [객체 지향 프로그래밍이란 프로그램을 객체 단위로 구성하고, 각 객체  간 관계 및 상호작용을 프로그램으로 나타낸 것 이다]

  • 장점
    • 코드의 재사용성이 높다. - 누군가의 코드를 갖다쓰기도, 상속하기도, 확장하기도 쉽다.
    • 유지 보수가 쉽다. - 해당 부분만 수정하면 된다.
    • 대형 프로젝트에 적합하다. - 업무 분담이 쉽다.
    • 즉, 강한 응집력(단일 책임)과 약한 결합력(약한 의존)을 가진다.
  • 단점
    • 처리 속도가 느리다. - 객체 간 정보 교환이 모두 메시지 교환을 통해 일어나므로 많은 오버헤드가 발생한다. 하지만 하드웨어의 발전으로 어느 정도 해소된 단점이다.
    • 객체가 많으면 용량이 커진다.
    • 설계시 많은 노력과 시간이 든다.

2. [객체 지향의 특징 (APIE)- 4가지 ]

  1. Abstraction(추상화) : 필요한 정보만 표현함으로써 공통 기능을 묶어 이름을 붙임
  2. Polymorphism(다형성) : 하나의 객체를 여러가지 타입(형)으로 참조 가능 
  3. Inheritance(상속) : 부모 클래스의 자산을 물려받아 자식을 정의함으로 코드의 재사용이 가능함
  4. Encapsulation(캡슐화) : 데이터를 외부에 직접 노출시키지 않고 메서드를 이용해 보호 가능. 클래스라는 캡슐에 멤버 변수와 메소드를 넣어서 관리하므로 재활용이 원활함.
*다형성 예시 :
▪️ 오버라이딩 : 메소드 이름은 같지만 동작이 다름 .(조상 클래스에 정의된 메서드를 자식 메서드에 적합하게 수정)
▪️ 오버로딩: 메소드 이름은 같지만 매개변수가 다름
구분 오버라이딩 오버 로딩
메소드 이름 동일 동일
매개변수, 타입 다름 동일
반환 타입 상관 없음 동일

*상속 예시:
▪️ Object 클래스는 모든 클래스의 조상 클래스이다. 

*캡슐화에서 데이터 보호를 위한 접근 제어자
접근 제어자 클래스 내 패키지 내 다른 패키지의
하위 클래스
(상속 관계 O)
패키지 외
(상속 관계 X)
private O X X X
default O O X X
protected O O O X
public O O O O

 


 

3. [객체 지향의 설계 원칙 (SOLID)- 5가지 ]

  1. SRP(Single Role Principle, 단일 책임 원칙): 한 클래스는 하나의 책임만 가진다. 기준은 변경으로, 변경시 그 부분 만 변경되도록 설계해야한다.
  2. OCP(Open Closed Principle,개방 폐쇄 원칙): 확장에는 열려있고 변경에는 닫혀있어야한다. 즉, 클라이언트 코드는 변경없이 추가되거나 확장할 수 있어야한다. 예를 들면, 클라이언트는 구현체를 직접 변경하면 안된다. 
  3. LSP(Liskov Substitution Principle,리스코프 치환 원칙):상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상 작동 해야한다. 즉, 하위 클래스는 상위 클래스의 인터페이스 규약을 다 지켜야한다. 예를 들면, 자동차 엑셀을 밟으면 앞으로 간다. -> 소울의 엑셀을 밟으면 앞으로 간다.
  4. ISP(Interface Segregation Principle,인터페이스 분리 원칙): 인터페이스는 인터페이스를 사용하는 클라이언트 기준으로 분리해야한다. 즉, 인터페이스 여러개가 하나보다 낫다. 적당히 잘 쪼개야 인터페이스가 명확해지고, 대체 가능성이 높아진다. 예를 들면, 자동차 인터페이스 하나보다는 장비 인터페이스, 운전 인터페이스 이렇게 2개가 더 낫다.
  5. DIP (Dependency Inversion Principle,의존성의 역전 원칙): 고수준의 모듈은 저수준의 모듈의 구현에 의존해서는 안된다. 즉, 클라이언트 코드는 인터페이스에 의존해야한다. 구현체가 아니라. 
728x90