Object Oriented Programming(객체 지향)
- 객체 지향 프로그래밍(
Object-Oriented Programming
)은 객체(Object
)를 중심으로 프로그램을 설계, 개발해 나가는 것 - 객체 지향 프로그래밍의 가장 큰 특징은 클래스를 이용해 함수(처리 부분), 변수(데이터 부분)를 하나로 묶어 객체(
Instance
)로 만들어 사용한다는 점 - C#은 여러 언어의 장점을 결합한 객체지향 언어.
- 언어의 사용을 단순화하여 숫자를 객체와 같이 처리하게 하고,
Collection
에 저장할 수 있게 해준다. - 박싱/언박싱의 개념을 가지고 있어 숫자를 객체로, 객체를 다시 숫자로 변경할 수 있게 해준다.
- 객체로 사용할 필요가 없는 숫자는 단순 값으로 처리되어 효율적인 사용이 가능합니다.
Procedural Programming(절차적)
- 객체지향 프로그래밍에 대조되는 것으로 생각하여 절차지향 프로그래밍으로 알고 있는 사람이 많은데, “절차지향 프로그래밍 = 절차적 프로그래밍” 이며, “절차적 프로그래밍”이 조금 더 맞는 단어이다.
- 절차적 프로그래밍이란
Procedure
(프로시저)를 이용하여 작성하는 프로그래밍 스타일이다.Procedure
의 목록으로는 루틴, 서브루틴, 메소드, 함수 등이 있다.c# #간단히 보는
procedure```의 목록
루틴: main 문 서브루틴: main문 밖에서 정의한 코드 블럭 중에 반환 값이 없는 것 함수: main문 밖에서 정의한 코드 블럭 중에 반환 값이 있는 것 ```
Object Oriented Programming(객체 지향) VS Procedural Programming(절차적)
- 절차적 프로그래밍과 객체지향 프로그래밍은 반대되는 단어가 절.대.로 아님을 이해해야 한다.
객체지향 언어 | 절차적 언어 | |
---|---|---|
장점 | - 코드의 재사용성이 용이 - 개발이 간단 - 유지보수가 쉬움 - 대규모 프로젝트에 적합 | - 처리속도가 빠름 - 컴퓨터의 처리구조와 비슷해 실행속도가 빠름 |
단점 | - 처리속도가 느림 - 객체에 따른 용량 증가 - 설계 단계에서 시간이 많이 소요 | - 유지보수가 어려움 - 대규모 프로젝트에 부적합 - 프로젝트 분석이 어려움 |
객체 지향 프로그래밍의 5가지 설계 원칙
- 단일 책임 원칙 : 클래스는 단 하나의 목적을 가져야 하며, 클래스를 변경하는 이유는 단 하나의 이유여야 한다.
- 클래스는 확장에는 열려 있고, 변경에는 닫혀 있어야 한다.
- 리스코프 치환 원칙 : 상위 타입의 객체를 하위 타입으로 바꾸어도 프로그램은 일관되게 동작해야 한다.
- 인터페이스 분리 원칙 : 클라이언트는 이용하지 않는 메서드에 의존하지 않도록 인터페이스를 분리해야 한다.
- 의존 역전 법칙 : 클라이언트는 추상화(인터페이스)에 의존해야 하며, 구체화(구현된 클래스)에 의존해선 안 된다.
객체 지향 프로그래밍의 4가지 특징
- 캡슐화 : 연관있는 변수와 메소드를 묶어주는 작업을 말하며,
- 클래스의 접근을 제한하는 것과 관계가 있다.
- 접근 지정자(
private
,protected
,public
)를 통해 외부로부터의 접근을 제한하고, 객체 내에서만 접근이 가능하도록(정보 은닉) 해준다.
- 캡슐화 : 연관있는 변수와 메소드를 묶어주는 작업을 말하며,
- 추상화 : 객체 지향에서 추상화란 객체에서 필요한 공통된 부분을 추출하는 것
- 각각의 클래스는 공통점을 가지는데 추상적인
class
로 둘의 공통된 부분을 묶을 수 있다.
- 각각의 클래스는 공통점을 가지는데 추상적인
- 추상화 : 객체 지향에서 추상화란 객체에서 필요한 공통된 부분을 추출하는 것
- 상속 : 속은 부모 클래스로부터 공통된 변수와 함수, 인터페이스를 그대로 물려받는 것
- 비슷한 객체들의 부모 클래스와 인터페이스를 정의하여 공통화 한 다음 상속받아 객체를 좀 더 다루기 쉽게 한다.
- 추상화에서 각 클래스의 공통된 부분을 묶었다면, 부모
class
를 상속받아 거기에 포함된 데이터를 그대로 사용할 수 있다.
- 상속 : 속은 부모 클래스로부터 공통된 변수와 함수, 인터페이스를 그대로 물려받는 것
- 다형성 : 다형성은 같은 종류의 클래스가 하나의 메시지에 대해 서로 다른 행동을 하는 것
- 공통적인
class
를 상속받았지만, 각자의 고유한 특징(함수)을 가진다. - 이렇듯 다형성을 통해 변경이 필요한 부분을 변경하여 사용할 수 있다.
- 다형성은
Overriding
,Overoading
형태로 제공된다.
- 공통적인
- 다형성 : 다형성은 같은 종류의 클래스가 하나의 메시지에 대해 서로 다른 행동을 하는 것