C#/과제

2020.04.22. 과제 - 객체지향[OOP] 프로그래밍 특징 / 5대 원칙

dev_sr 2020. 4. 22. 22:03

 

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

 

1. 캡슐화( Encapsulation )

1) '은닉화'라고도 하며 데이터(속성)와 데이터를 처리하는 함수를 하나로 묶은 것을 의미한다.

2) 외부에서 잘못된 접근을 할 경우 객체의 데이터나 메소드에 유효하지 않은 값이 들어가서 오류가 나는 것을 방지한다.

    이를 정보은닉(Information Hiding)이라고 한다.

3) 엑세스 한정자(접근 제한자)를 두어 어디까지 보호할 것인지, 노출시킬 것인지 설정한다. 

4) 캡슐화된 객체들은 재사용 할 수 있다.

 

2. 추상화( Abstraction )

1) 객체들의 공통 특징(property, mothod)를 뽑아 클래스로 구현한다.

2) 불필요한 부분들은 생략하고 필요한 부분만 개략화한다(모델화)

3) 시스템을 구현하기 전에 유사한 설계도(모델)를 만들어 시스템의 구조 및 구성을 가시적으로 볼 수 있다.

 

3. 상속성( Inheritance )

1) 기본 클래스(부모 클래스)로부터 모든 속성과 메서드를 파생 클래스(자식 클래스)가 물려받는 것을 의미한다.

2) 파생 클래스는 기본 클래스의 속성과 메서드를 자신의 클래스 내에 다시 정의하지 않고 사용할 수 있다.

3) 물려받은 속성과 메서드는 다시 재정의하여 상황에 맞게 내용을 가감하여 사용할 수 있다.

4) '다중상속'은 1개의 클래스가 2개 이상의 부모 클래스로부터 상속 받는 것을 의미한다.

5) 이를 통해 다형성(Polymorphism)을 확보할 수 있다.

 

4. 다형성( Polymorphism )

1) 상속을 통하여 같은 타입(부모 클래스)이지만 기능을 확장하거나 변경하여 실행 결과가 다양한 객체와 메서드를 이용할 수 있는 성질을 의미한다. 

2) Overloading : 하나의 클래스에서 각각 다른 기능을 가진 메서드를 동일한 이름을 부여하여 정의할 수 있다.

3) Overriding : 파생 클래스에서 기본 클래스에게 상속받은 속성, 메서드, 반환 값을 새롭게 정의할 수 있다.   

 

 

 

 

 

객체지향 프로그래밍의 5대 원칙 ( SOLID )

 

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

1) 객체는 하나의 책임(기능)만을 가져야한다.

2) 클래스의 목적을 명확히 함으로써 기능을 명확히 하고 구조가 복잡해지거나 불필요한 수정사항이 발생하는 것을 예방한다.

3) 이를 지키지 않으면 클래스의 목적이 모호해지고 기능을 수정할 때 영향을 받는 범위가 커져 유지보수가 힘들어진다.

 

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

1) 객체는 기존 코드가 수정되는 것에는 폐쇄적이고 확장에 대해서는 개방적이어야 한다.

2) 유지보수를 용이하게 하고 코드의 가독성을 높여준다.

 

3. 리스코프 치환 원칙 ( LisKov Substitution Principle )

1) 파생 클래스는 언제나 기본 클래스의 기능을 대체할 수 있다는 것을 의미한다.

2) 상속 관계에서는 일관성 있는 is a관계가 성립되어야 하는데 이를 지키지 않으면 is a 관계가 망가져 다형성을 지킬 수 없게 된다

 

4. 의존성 역전 원칙( Dependency Inversion Principle )

1) 구체적인(변화하기 쉬운) 클래스보다 추상적인(변화하기 어려운) 클래스에 의존해야 한다는 원칙이다.

2) 추상 클래스와 일반적인 인터페이스를 통해 이 원칙을 준수할 수 있다.

 

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

1) 클래스에서 사용하지 않는 인터페이스는 구현하지 말아야 한다.

2) 여러 개의 구체적인 인터페이스를 사용하여 사용하지 않는 인터페이스에 영향을 받지 말아야 한다.

3) 잘 준수 될 경우 시스템 내부 의존성이 낮아져 유지보수와 수정이 용이해진다.