본문 바로가기

프로그램/프로그램 기타

[프로그램 기타] 객체 지향 프로그래밍(Object-Oriented Programming, OOP)

728x90
반응형

1. 객체 지향 프로그래밍

객체 지향 프로그래밍은 프로그램을 데이터와 처리 방법으로 나누는 것이 아니라,

프로그램을 객체 단위로 나누어 정의하고, 이 객체들이 메시지를 주고 받으면서 데이터를 처리 방법입니다.

객체 지향언어와 비교되는 방식은 절차적 프로그래밍(Procedural Programming) 입니다.
절차적 프로그래밍이란 위에서부터 아래로 순차적으로 프로그램을 진행하는 방식입니다.

 

코더제로 프로그램 기타 객체 지향 프로그래밍(Object-Oriented Programming, OOP) 절차적 프로그래밍 vs. 객체 지향 프로그래밍
그림. 절차적 프로그래밍 vs. 객체 지향 프로그래밍

 

1.1 절차적 프로그래밍 예제

using UnityEngine;

public class ProceduralProgramming : MonoBehaviour 
{ 
    void Start() 
    { 
        float x = 4, y = 1;

        float add = x + y; 
        float subtract = x - y; 
        float multiply = x * y; 
        float divide = x / y; 
    } 
}

 

 

1.2 객체 지향 프로그래밍 예제

using UnityEngine;

public class ObjectOrientedProgramming : MonoBehaviour 
{ 
    void Start() 
    { 
        float x = 4, y = 1; 
        float add = Add(x, y); 
        float subtract = Subtract(x, y); 
        float multiply = Multiply(x, y); 
        float divide = Divide(x, y); 
    } 

    float Add(float x, float y) 
    { 
        return x + y; 
    } 

    float Subtract(float x, float y) 
    { 
        return x - y; 
    } 

    float Multiply(float x, float y) 
    { 
        return x * y; 
    } 

    float Divide(float x, float y) 
    { 
        return x / y; 
    } 
}

 

  장점 단점
절차적 프로그래밍 컴퓨터 처리구조와 유사하여 실행 속도가 빠름 유지보수가 어려움. 실행순서가 정해져 있어 코드 순서가 바뀌면 동일한 결과를 보장 못함.
디버깅이 어려움.
객체 지향 프로그래밍 프로그램 신뢰성이 높아짐.
코드 재사용이 쉬워짐.
업그레이드 쉬움.
디버깅이 쉬움.
처리속도가 절차적 프로그래밍보다 느림.
설계에 많은 시간이 듦.

 

 

2. 기본 구성 요소

변수(Variable) : 숫자나 문자, 기호 등의 값들이 저장되는 메모리 공간의 이름.
함수(Funciton) : 프로그램 내에서 특정 작업을 수행하기 위한 명령어의 집합.
객체(Object) : 변수와 메소드로 구성되어, 소프트웨어에서 기능을 실행하는 단위.
클래스(Class) : 객체를 만들기 위해 변수와 메소드로 정의한 사용자 정의 데이터형(User Define Data Type)
인스턴스(Instance) : 클래스를 이용하여 생성한 객체. 클래스를 메모리에 할당.
추상화(Abstraction) : 여러 가지 정보 중, 필요한 정보들만을 간추려 내는 것.

함수(Function) : 어떤 기능을 수행하는 코드 모음.
메서드(Method) : 클래스 내에 정의 된 함수.

 

 

3. 객체 지향 프로그래밍 요소

3.1 캡슐화(Encapsulation)


변수와 메소드를 하나의 단위로 묶는 것입니다.

 

 

3.1.1 정보 은닉(Information Hiding)


접근 제한자를 사용하여 프로그램 세부 구현 내용을 감추는 것입니다.

[접근 제한자]
- public : 클래스의 외부에서 사용 가능
- protected : 상속받은 자식 클래스에게만 노출 됨.
- private : 클래스의 내부에서만 사용


3.2 상속(Inheritance)

 

상속은 자식 클래스가 부모 클래스의 특성과 기능을 그대로 물려받는 것입니다.


3.3 다형성(Polymorphism)

 

하나의 변수명, 함수명 등이 상황에 따라 다른 의미로 해석될 수 있는 것을 말한다.

오버라이딩(Overriding) : 부모클래스의 메서드와 같은 이름, 매개 변수를 가지지만, 자식 클래스에서 일부 기능을 재정의 하는것임.

오버로딩(Overloading) : 같은 이름의 메소드를 매개 변수의 타입과 개수를 다르게 하여 다른 메소드로 사용하는 것임.


4. 객체지향 프로그래밍 원칙

 

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

 

객체는 오직 하나의 책임을 가져야 합니다.


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


객체는 확장에 대해서는 개방적이고 수정에 대해서는 폐쇄적이어야 합니다.
기능을 추가하거나 변경해야 할 때 이미 제대로 동작하고 있던 원래 코드를 변경하지 않아도, 기존의 코드에 새로운 코드를 추가함으로써 기능의 추가나 변경이 가능하다.

 

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

 

자식 클래스는 언제나 자신의 부모 클래스를 대체할 수 있어야 합니다.

 

 

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


클라이언트에서 사용하지 않는 메서드는 사용해선 안됩니다.

 

4.5 의존성 역전 원칙(DIP, Dependency Inversion Principle)


고수준의 모듈이 저수준 모듈의 구현에 의존해서는 안됩니다.
저수준의 모듈이 고수준 모듈에서 정의한 추상 타입에 의존해야 합니다.
여기서 고수준 모듈이란 단일 기능을 제공하는 모듈이고, 저수준 모듈이란 이 고수준 모듈을 구성하는 모듈들입니다.

728x90
반응형