객체지향(OOP)
in Essay on 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) : 의존 역전 원칙
고수준 모듈은 저수준 모듈의 구현에 의존해서는 안된다.
