객체 지향 프로그래밍(OOP : Object Oriented Programming)

ios dev·2022년 2월 5일
0

객체 지향 프로그래밍(OOP : Object Oriented Programming)

객체 지향 프로그래밍 은 컴퓨터 프로그램을 객체(Object) 들의 모임으로 파악하고자 하는 프로그래밍의 패러다임 중에 하나이다. 객체(Object) 는 서로 메시지를 주고 받을 수 있으며 데이터를 처리할 수 있다.

객체 지향 프로그래밍 은 큰 문제를 작게 쪼개는 방식이 아니라 작은 문제를 해결할 수 있는 객체(Object) 를 만들고 객체(Object) 들을 조합해 큰 문제를 해결하는 Bottom-Up 방식을 지향한다.


객체 지향 프로그래밍의 구성 요소

클래스(Class)

클래스란? 특정 객체를 생성하기 위한 공통적인 속성(attribute)과 행위(behavior)를 하나로 묶는 개념적(추상적)인 주체, 다른 클래스와 독립적으로 디자인되어야 한다.

속성(attribute)? Property, Member Variable, Field, State 와 같다.
행위(behavior)? Method , Member Function, operation 과 같다.

객체(Object)

객체란? 클래스의 인스턴스(Instance)로서 자신 고유의 속성을 가지며 클래스에서 정의한 행위를 수행한다.

인스턴스(Instance)? 소프트웨어 세계에 구현된 실체, 실체화된 인스턴스는 메모리에 할당된다.

메서드(Method)

메서드란? 클래스로부터 생성된 객체를 사용하는 방법. 객체의 속성을 조작하는 데 사용된다.


객체 지향 프로그래밍의 주요 특징

높은 응집력(High Cohesion)

응집력이란? 객체 내에 존재하는 함수, 데이터 등의 구성 요소들 사이의 밀접한 정도를 나타내는 것.
한 객체 안에 특정 목적을 위해 밀접하게 연관된 기능들이 구현되어 있다면 응집력이 높다(High Cohesion)고 표현하고,
반대로 서로 관련 없는 함수나 데이터들이 존재하거나 관련성이 적은 기능들이 구현되어 있다면 응집력이 낮다(Low Cohesion)고 표현한다.

약한 결합력(Weak Coupling)

결합력이란? 객체가 얼마나 의존적인지를 나타내는 정도.
한 객체의 코드를 수정했을 때 해당 객체를 사용하는 다른 객체의 코드는 수정할 필요가 없다면 의존성이 낮은 약한 결합력(weak coupling)을 가지고 있는 것이고,
반대로 다른 객체의 코드도 수정해야 하는 경우라면 의존성이 높은 강한 결합력(strong coupling)을 가지고 있는 것이다.

추상화(Abstraction)

추상화란? 객체들이 가진 공통 특성을 파악하고 불필요한 특성을 제거하는 과정. 크게 속성(attribute)행위(behavior) 로 나뉜다.

캡슐화(encapsulation)

캡슐화란? 추상화된 속성과 행위들을 관련있는 것끼리 묶고 외부 접근을 막는 작업.
외부 접근을 막는 작업을 정보 은닉(information hiding) 이라고 하는데, 정보 은닉의 목적은 높은 응집력(High Cohesion)과 약한 결합력(Weak Coupling)이다.

상속(inheritance)

상속이란? 객체 지향 프로그래밍의 핵심 기능 중에 하나로 대상이 되는 클래스의 모든 특징들을 물려받는 것을 말한다.
예를 들어, 임의의 클래스 B가 다른 클래스 A를 상속 받는다면 A 클래스의 속성과 행위들을 모두 물려받게 된다.
이때, 클래스 A와 B는 상속 관계(inheritance relation) 가 되고 A부모 클래스(parent class), B자식 클래스(child class) 라고 한다.

다형성(Polymorphism)

다형성이란? 부모 클래스의 메서드를 자식 클래스 내에서 재정의(override) 하여 사용하는 것.

Example

class HomeViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

0개의 댓글