hmk run dev

객체지향 프로그래밍 OOP 본문

programming

객체지향 프로그래밍 OOP

hmk run dev 2021. 11. 24. 10:40
OOP란 Object-Oriented Programming 의 줄임말

 

객체지향과 대비되는 말로 절차지향이 있다 절차지향 프로그래밍은 프로그램을 함수단위로 쪼개 큰 문제를 작은 단위들로 나누어 해결하는 방식으로 top-down 방식이라고도 한다.

 

프로그램을 설계할떄 객체지향 보다 비교적 적은시간이 들긴하지만 필요한 데이터가 여기저기 분산되어 있고 프로그램에 변화를 주었을때 여기저기서 문제가 발생할 수 있는 문제점 등이 있다.


객체지향은 큰 문제를 작게 나누는 것이 아닌 작은 문제들을 해결하는 객체들을 만들어 객체끼리 서로 소통하면서 큰문제를 해결하는 bottom-up 방식이라고 할 수 있다.

 

설계시 비교적 시간이 오래걸리지만 코드의 재사용성, 유지보수의 용이, 간결한 코드 등 많은 장점을 가지고 있는 프로그래밍 방식이다. 

 


< CLean Code >의 저자, 로버트 마틴이 말하는
OOP 객체지향의 5가지 원칙 SOLID

S (SRP : Single Responsibility Principle)

한 클래스는 하나의 책임만 가지고 있어야 한다.

 

O (OCP : Open/Closed Principle)

확장은 열려 있어야하나, 변경에는 닫혀 있어야한다

 

L (LSP : Liskov’s Substitution Principle)

프로그램의 객체는 프로그램의 정확성을 지키면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.

 

I (ISP : Interface Segregation Principle)

특정 사용자를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 더 낫다.

 

D (DIP : Dependency Inversion Principle)

추상화에 의존하며 구체화에 의존하면 안된다.

 


 

OOP의 4가지 특징

1. 캡슐화( encapsulation )

  • 객체 내부의 구현 내용을 외부에 서 볼 수 없게 은닉해놓은 것
  • 변수와 메소드들을 하나로 묶음
  • 데이터를 외부에서 직접 접근하지 않고 함수를 통해서만 접근가능
  • 접근 제어 선언 ex)
    • public : 클래스 외부에서 접근 가능
    • private : 클래스 내부에서만 접근가능 (함수를 통해 접근가능)
    • protected : 상속받은 자식 클래스에서만 접근 가능

2. 상속( inheritance )

  • 자식 클래스가 부모 클래스의 특성과 기능을 물려받음
  • 기능의 일부분을 수정할때 자식 클래스에선 물려받아 수정 후 사용
  • 상속은 캡슐화를 유지하고 클래스 재사용성을 높여줌

3. 추상화( abstracion )

  • 인터페이스로 클래스들의 공통적인 특성(변수, 메소드)들을 묶어서 표현한것
  • ※ 인터페이스는 프로그램을 만들기위한 설계도 혹은 개발자들의 약속? 이라고 할 수도 있다..!

4. 다형성( polymorphism )

  • 어떤 변수, 메소드가 상황에 따라 다른 결과물을 만들어 내는 것
    • ex ) 오버로딩(Overloading) : 하나의 클래스에서 메소드의 이름이 같지만, 파라메터가 다른 것
    • 오버 라이딩(Overriding) : 부모 클래스의 메소드를 자식 클래스의 용도에 맞게 재정의 하여 코드의 재사용성을 높임

참고

https://velog.io/@ygh7687/OOP%EC%9D%98-5%EC%9B%90%EC%B9%99%EA%B3%BC-4%EA%B0%80%EC%A7%80-%ED%8A%B9%EC%84%B1

 

📚OOP의 5원칙과 4가지 특성

Object-Oriented Programming 의 줄임말객체 지향 프로그래밍 방식입력을 받아 명시된 순서대로만 처리하고 결과를 내는 방식절차적 프로그래밍 방식의 개선된 형태프로그램을 함수단위로 나누고 함수

velog.io

 

'programming' 카테고리의 다른 글

좋은 개발자가 되기 위한 자질은?(Feat. 존카맥)  (0) 2023.04.29
Comments