728x90
1. OOP
실제 세계에서의 '객체(Object)'라 함은 '사람' 혹은 '자동차'와 같은 사물에 비유될 수 있습니다. 많은 프로그래밍 언어에서 이러한 '객체(Object)'를 표현하기 위해 OOP(Object-Oriented Programming)라는 개념을 도입하고 있고 그중 C#에서는 class와 struct와 같은 키워드를 사용해 이러한 Object를 코드로서 표현하고 있습니다.
OOP는 프로그래밍에서 다음과 같은 특징을 가집니다.
- 캡슐화(Encapsulation) : 객체는 대상에 따라 필요한 데이터와 동작(Action)을 가질 수 있습니다. 예를 들어 '자동차'를 표현하는 경우 '속도' 혹은 '색상'과 같은 값(데이터)를 가질 수 있으며 '주행', '정지'와 같은 동작을 가질 수 있습니다. 캡슐화는 이러한 객체의 데이터나 동작에 대해 외부에서 접근할 수 있는 범위를 제한하는 과정을 의미합니다.
- 구성(Composition) : 객체가 만들어지는 구성요소를 의미합니다. 예를 들어 '자동차'라면 4개의 바퀴와 하나의 엔진, 좌석등이 '자동차'라는 객체의 Composition이 될 수 있습니다.
- 집합(Aggregation) : 서로 다른 객체가 모여 하나의 다른 객체가 생성될 수 있는 것을 말합니다. 예를 들어 '사람'은 '자동차'의 Composition이 될 수 없지만 운전석에 탑승하게 되면 '자동차'를 제어하는 하나의 요소로서 작용할 수 있습니다.
- 상속(Inheritance) : 만들어진 클래스로 부터 상속받아 새로운 클래스가 만들어지는 것을 의미합니다. 이때 상속의 대상이 되는 클래스를 기반(Base) 혹은 슈퍼(Super) 클래스라고 하며 상속된 클래스를 서브(Sub) 클래스 혹은 상속 클래스라고 합니다. 클래스를 상속하는 것은 Code상으로 기존 클래스의 기능을 재사용하기 위한 목적이 크다고 할 수 있습니다. 예를 들어 Exception클래스는 모든 예외에 걸쳐 실행될 수 있는 몇 가지 Member를 가지고 있는데 이를 상속한 SqlException클래스에서는 Exception클래스에서의 기존 Member를 포함하면서 Database연결과 관련된 속성 같은 확장된 Member를 가지게 되는 것입니다.
- 추상화(Abstraction) : 객체의 세부적인 것은 무시하고 핵심만을 포착하며 클래스화한 것을 말합니다. C#에서는 'abstract'라는 키워드를 사용해 생성된 클래스를 말하는데 예를 들어 .NET의 Stream클래스는 추상 클래스이며 FileStream이나 MemoryStream 같은 클래스는 Stream클래스를 상속받아 만들어진 클래스입니다. 특이한 점은 '추상 클래스'는 상속 가능한 기반 클래스로서의 역할만 할 뿐 직접적으로 사용될 수 있는 클래스가 아니라는 것입니다. 이 부분에 관해서는 추상 클래스를 다룰 때 다시 언급될 것입니다.
- 다형성(Polymorphism) : 기반클래스를 상속된 서브클래스에서 기반 클래스의 동작을 재정의하는 것을 말합니다. 이를 override라고 하며 기반 클래스에서는 특정 동작을 수행하는 메서드에서 override가 가능할지를 지정할 수 있습니다.
728x90
'.NET > C#' 카테고리의 다른 글
[C#] C#과 OOP(Object-Oriented Programming) - 3. 필드(Field) (0) | 2022.06.24 |
---|---|
[C#] C#과 OOP(Object-Oriented Programming) - 2. 클래스 라이브러리 (Class library) (0) | 2022.06.24 |
[C#] 예외처리 (0) | 2022.06.24 |
[C#] 형변환 (0) | 2022.06.24 |
[C#] 흐름제어 (0) | 2022.06.24 |