CS

객체지향 프로그래밍이란?

khkg12 2023. 7. 13. 18:03

객체지향 프로그래밍이란? 

 현실 세계를 프로그래밍으로 옮겨와 현실 세계의 사물들을 객체로 보고, 그 객체로부터 개발하고자 하는 특징과 기능을 뽑아와 프로그래밍 하는 기법이다. 

 

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

  캡슐화 : 속성과 기능을 캡슐로 감싸 외부로부터 안보이게 하는 정보 은닉 개념.

  상속 : 부모의 클래스로부터 모든 것을 상속받는 자식 클래스의 구조를 만드는 것.

  다형성 : 상황에 따라 esc키가 다른 역할을 하는 것처럼 하나의 기능이 다양한 역할을 수행하는 것.

 

객체지향 5원칙 (SOLID 원칙)

1. 단일 책임 원칙( Single Responsibility Principle )

    ○ 모든 클래스는 각각 하나의 책임만을 가져야 한다. 클래스를 변경하는 이유 또한 단 하나의 이유여야 한다.

 

1. 개방 폐쇄 원칙( Open Closed Principle )

    ○ 클래스는 확장에는 열려야 있어야 하며, 수정에는 닫혀 있어야 한다.

 

1. 리스코프 치환 원칙( Liskov Substitution Principle )

    ○ 상위 타입의 객체를 하위 타입으로 바꾸어도 프로그램은 일관되게 동작해야 한다. 

 

1. 인터페이스 분리 원칙( Interface Segregation Principle )

    ○ 클라이언트는 이용하지 않는 메서드가 존재하지 않도록 클래스를 구현해야 한다. 하나의

       일반적인 인터페이스보다 구체적인 여러개의 인터페이스가 낫다.

 

1. 의존 역전 법칙( Dependency Inversion Principle )

    ○ 클라이언트는 추상화에 의존해야 하며, 구체화에 의존해서는 안된다.즉 구체적인 클래스보다

       인터페이스나 추상클래스와 관계를 맺어야 한다. 

  

그래서 프로그래밍에서의 객체지향은 무엇이냐 하면

  캡슐화를 통해 만들어진 하나의 클래스, 즉  짜여진 틀로 여러 개의 인스턴스를 도장처럼 생성할 수 있고 그 여러개의 인스턴스가 독자적인 기능을 수행하는 것을 의미한다. 

 

예시

class Monster
{
	public int Hp
    {
    	get => hp;
        set
        {
        	hp = value;
        }
    }
    private int hp;
    int atk;
    string name;
}

void Start()
{
	Monster slime = new Monster(); // Monster라는 하나의 틀로 slime, devil이라는 객체를 찍어냄
    Monster devil = new Monster();
    
    slime.Hp -= 10;
    devil.Hp += 10;
    
    // 같은 몬스터의 클래스로부터 생성된 객체지만 각자 다른 영역에 존재하는, 엄연히 다른 객체
}