객체지향(OOP)


Object-Oriented Programming (OOP)

객체지향 프로그래밍이란 무엇인가?

데이터와 프로시저로 나누는 것이 아닌 객체를 사용하여 연산하는 방식

객체란 무엇인가?

객체: 데이터와 이 데이터를 연산하는 프로시저를 함께 묶은 단위

  • Data + Procedure(=Method or Function or Operation(연산))

객체 연산 방법

Data에 직접 접근하지 않고 메시지나 요청을 통해 객체내부에서 Data를 연산(Tell. don’t ask)

  • 요청 or 메시지: 객체가 연산을 실행하게 하는 유일한 방법
  • 연산: 객체 내부 Data의 상태를 변경하는 유일한 방법

프로시저지향에서 객체지향으로 바뀌게 된 이유

Procedural Programming에서 문제와 해결하는 방법

  • 코드가 많아질 수록 기억하고 있어야 할 범위가 증가하며 코드 유지보수 비용 증가
  • 코드를 프로시저 단위로 추상화하여 호출하는 하향식(Top-Down)으로 개발
  • Data를 추상화하지 않아 함수에 엉뚱한 Data를 넣어 Data가 변질되는 실수 발생
  • Data를 추상화하여(Struct) 잘못된 Data주입 실수 방지
  • 함수내부에서 전역 Data를 잘못 접근하여 Data가 변질되는 실수 다시 발생
  • 함수가 Data에 접근할 수 있는 범위를 제한해야 하는 필요성 증가

객체지향

  • Data와 해당 Data를 사용하는 프로시저를 결합
  • 외부에서는 요청을 통해서만 동작
  • 객체의 Data는 내부 프로시저에서만 변경 가능하도록 하여 외부에서의 Data오염 방지
  • 코드를 수정하는 경우 해당 객체만 변경되기 때문에 유지보수 비용 감소
  • 객체와의 조합으로 프로그래밍하여 상향식(Bottom-Up)으로 개발

객체지향 언어와 비객체지향 언어

객체지향인 언어: C++, C#, Java, Python, …
객체지향이 아닌 언어: C, Pascal, Visual Basic, …

C언어에서는 객체지향이 불가능한가?

C언어에서도 가능하다. 다만 언어에서 지원하지 않기 때문에 객체지향언어보다 구현 난이도가 높다.
Object oriented programming in C

SOLID(객체지향 언어의 5대 설계원칙)

SRP(Single Responsibility Principle) : 단일 책임 원칙

클래스는 단 하나의 책임을 가져야 하며 클래스를 변경하는 이유는 단 하나의 이유이어야 한다.

OCP(Open-Closed Principle) : 개방-폐쇄 원칙

확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다.

LSP(Liskov Substitution Principle) : 리스코프 치환 원칙

상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.

ISP(Interface Segregation Principle) : 인터페이스 분리 원칙

인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다.

DIP(Dependency Inversion Principle) : 의존 역전 원칙

고수준 모듈은 저수준 모듈의 구현에 의존해서는 안된다.




© 2017. by isme2n

Powered by aiden