View
객체지향 프로그래밍
Object-Oriented Programming
C#이 가지고 있는 특성이 객체지향이다. 그러나 이제껏 배웠던 C가 절차지향 언어이기에, 객체지향이라는 용어 자체가 낯설게 느껴졌다.
객체지향이 어떤 특성을 가지고 있는지를 먼저 파악하고자 한다.
객체지향 프로그래밍이란?
객체 단위로 쪼개진 프로그램이 객체끼리의 상호작용에 의해 작동된다.
프로그램에 필요한 데이터들을 추상화하여 객체를 만들고, 객체 사이의 상호작용을 통해 프로그램을 작동시킨다.
여기서 객체는 structure 같은 데이터 묶음이 아닌, 데이터와 메서드가 하나의 역할에 대해 묶인 덩어리를 말한다.
객체지향은 말그대로 '성향'이나 '방법'을 말하는 것이기에, "어떤 언어는 객체지향 언어"라는 말은 옳지 않다. 그러나, 개념을 수용하기 위해 어느정도 수긍을 하고 넘어가려 한다.
객체지향 프로그래밍의 요소
- 캡슐화 - Encapsulation : 뭉치기. 역할에 따라 하나로 묶임. 이에 따라 관련 기능이 하나에 묶여있어 재사용이 편리하다. 또한, 클래스 외부에서 내부가 돌아가는 과정을 볼 수 없게 차단.
- 상속 - Inheritance : 부모 클래스 → 자식 클래스 로 기능을 물려주면서 필요한 부분만 수정하여 그대로 사용할 수 있다.
- 다형성 - Polymorphism : 변수나 함수가 상황에 따라 다양하게 해석될 수 있다.
객체지향의 5원칙 ( SOLID )
- Single Responsibility Principle - 단일 책임 원칙 : 하나의 객체는 하나의 책임만을 져야한다
- Open Closed Principle - 개방 폐쇄 원칙 : 기능의 확장에 있어서는 개방적, 기능의 수정에 있어서는 폐쇄적이여야 한다.
- Liskov Substitution Principle - 리스코프 치환법칙 : 자식 클래스는 언제나 부모 클래스를 대신할 수 있다.
- Interface Segregation Principle - 인터페이스 분리원칙 : 클라이언트에서 사용하지 않는 메서드는 사용해선 안되며, 이를 위해 인터페이스를 더 작게 쪼갠다.
- Dependency Inversion Principle - 의존성 역전 원칙 : 추상적, 안정적, 고수준의 클래스는 구체적, 불안정, 저수준의 클래스에 의존할 수 없다.
객체지향의 장단점
캡슐화로 인해 같은 기능의 변수, 메서드가 모여있어 개별적인 유지보수가 편리하다. 이에 따라 기능에 따른 코드의 재사용이 편리하다.
프로젝트 자체를 모듈화 하여 작업할 수 있기에 일감을 나누기 편리하다.
클래스 안의 작동은 볼 수 없기에, 시스템적 보안이나 자료훼손방지에 효율적이다.
처리속도가 느리다.
용량이 커진다.
설계의 난이도가 어렵다.