기본 개념
* OOP(Object-oriented programming)를 설명하고, PP(Procedural Programming)와 비교 할 수 있는가?
* 프로그래밍 대상을 클래스화 시키고, 객체(인스턴스)를 만들어 메서드를 사용할 수 있는가?
* 클래스와 인스턴스(객체)의 논리적 개념을 구분 할 수 있는가?
- OOP란?
: 코드 내의 모든 것을 Object(객체)로 표현하고자 하는 programming paradigm
: Encapsulation, Inheritance, Polymorphism
- Object(객체)란?
: (현실의) 세상 모든 것
: (프로그래밍에서) Class(클래스) 복사본이 메모리에 로드된 상태(= instance)
- Class(클래스)란?
: (현실의) Object(객체)를 Abstract(추상화)해 속성과 기능을 코드로 나타낸 복합 데이터형 설계도
- Abstract(추상화)란?
: 프로그래밍에 필요한 요소(속성 + 기능)만을 추출하는 작업
- Instance(인스턴스)란?
: Class(클래스)의 복사본이 메모리에 로드된 상태(= 객체)
- Member(맴버)란?
: 클래스의 Field(필드) + 메서드
- Field(필드)란?
: 클래스의 속성, variable(변수)를 OOP에서 부르는 명칭
- Method(메서드)란?
: 클래스의 기능, function(함수)을 OOP에서 부르는 명칭
6. method
6.1. method
- Function(함수)
: 일련의 코드를 하나의 이름 아래 묶은 것
- Acess Modifier(접근 한정자)의 종류와 사용 이유?
: 다른 코드에서의 접근 가능 여부를 제어
: C# 클래스 맴버는 기본적으로 private
- Parameter(매개변수)
: 매서드(함수)의 변수
- Arguements(실인수)
: 매서드의 매개변수(Parameter)에 전달되는 실제 값(value)
- Call(매서드 호출)
: 메소드 이름을 사용하는 것만으로 선언된 메서드의 일련의 코드를 한번에 실행
- Return(반환)
: 메서드 흐름제어, 결과값 반환
- void(반환 형식)
: 함수 내부의 일련의 코드만 실행, ruturn 값이 없다.
- pass by value (deep copy)
: 값으로 전달되면, 매개변수의 독립적인 공간에 복사된다.
- pass by reference (shallow copy)
: 참조로 전달되면, 매개변수와 원본값이 연결된다.
- Overroading
: 다중정의
: 매소드의 매개변수 갯수와 데이터 타입 종류 그리고 순서에 따른 다형성
- Static Method, Static Field
: 클래스 메서드, 정적 메서드
: 필드를 공유한다.
: 클래스명.메서드명( ) 으로 사용 (vs. 인스턴스명.인스턴스메서드명( ))
: 인스턴스는 여러개 존재할 수 있으나, 클래스는 하나만 존재한다.
6.2. ref vs out
- ref 키워드
: pass by reference (shallow copy)
- out 키워드
: ref 참조시 발생하는 런타임 오류를 out 을 통해 컴파일 오류로 찾을 수 있다.
: 함수 호출시, 매개변수 자리에서 변수를 선언 할 수 있다.
6.3. named arguments vs optional arguments
- named arguments: 명명된 인수 (variable : value)
: 매소드 호출시, 매개변수의 순서에 상관없이, (매개변수명 : 값)으로 전달 가능
- optional arguments: 선택적 인수 (variable = value)
: 매소드 선언시, 매개변수의 기본값 할당
6.3. params vs overroading
- params
: 가변 개수 인수를 C 콘솔 입력 배열 담기듯 사용
: 가변 개수 인수는 데이터 형식은 같으나 인수의 개수만 유연할때 사용한다.
- Overroading
: 다중 정의 (vs. Overriding, 재정의)
: 매소드의 매개변수 갯수와 데이터 타입 종류에 따른 다형성
: 매개변수의 개수가 유한하고 데이터 타입이 같지 않다면 오버로딩을 사용한다.
6.4. Local function
- Local function
: C macro, C++ incline, C# Local function
: 그냥 씀
7. class
7.1. class
- Class(클래스)
: 속성과 기능을 코드로 나타낸 복합 데이터형
- Constructor(생성자)
: 클래스를 인스턴스(객체)로 만들며 초기화 시키는 메서드
: 생성자의 이름은 클래스 이름과 동일한 이름을 가진다.
- new
: 생성자 메서드 사용에 필요한 키워드
- Default Constructor
: 자동 생성되는 기본 생성자
- Constructor Overroading
: 생성자 또한 메서드다.
: 메서드에 작용하는 모든 방식 적용 가능하다.
- Object Deep Copy, Shallow Copy
: 인스턴스는 태생이 Referece_Variable이다.
: Object_Type Reference_Variable = new Constructor();
: pass by reference (shallow copy)
: 인스턴스의 주소값으로 전달되며, 실제 원본 객체와 연결된다.
: 함수의 매개변수는 태생이 Primitive_Variable이다.
: Primitive_Type Reference_Variable = new Data Type();
: Method pass by value (deep copy)
: 값으로 전달되면, 매개변수의 독립적인 공간에 복사된며, 참조 타입을 사용하기 위한 별도의 방법을 사용해야 한다.
Object | Method | |
Data Type | Reference | Primitive |
Variable Type | Referece_Variable | Primitive_Variable |
Default Copy | Shallow Copy | Deep Copy |
- ICloneable.Clone() 메소드
: 객체를 힙에 새로 할당해 맴버를 각각 복사하기 위한 인터페이스
: Deep Copy
- this
: 클래스(인스턴스)의 주소값
: 자기 자신을 의미한다.
- this() Constructor
: 오버로딩된 생성자 메서드리스트 중에서 적합한 메서드를 재호출하게 한다.
- Inheritance
Base Class
Derived Class
생성 순서 Base > Derived
소멸 순서 Derived > Base
7.2. Sealed
: 클래스의 상속 제한
: 메서드의 오버라이딩(재정의) 제한
: 메서드의 오버로딩(다중정의)은 접근 제한자로 제한
: C#은 클래스의 접근 제한자가 없다.
7.3. Casting, is, as
- UpCasting
Animal a = new Dog();
a.name;
a.age;
a.bark(); dog 객체의 bark()실행
- DownCasting
Parent parent = new Child();
Child child = (Child)parent;
- is, as
7.3. Polymorphism, virtual, override
: 오버라이딩(재정의)
7.4. Method Hiding, new
: 파생 클래스에서 오버라이딩된 메서드만 실행되게 함.
: 다운 캐스팅시, 상위 클래스(base class)의 메서드가 실행된다. = 다형성이 이루어지지 않는다.
7.5. Readonly
: 생성자 내부에서 변경 가능하다.
: const, private
7.6. Nested Class
:
7.7. Extended Method
:
7.8. Struct
: class private 는 실세계의 객체를 추상화하려는 데 그 존재의 이유
: struct public 은 데이터를 담기 위한 자료구조로 사용된다.
: 구조체의 인스턴스는 스택에 할당되고, 가비지 컬렉터 없이 제거된다.
: 복합 데이터 형식
: readonly - 생성자를 통해 필드 값이 변경된 객체를 만들 수 있다.
7.9. Tuple
: 여러 필드를 담을 수 있는 구조체
: 복합 데이터 형식을 선언할때 적합
- unnamed tuple
- named tuple
- Deconstructor(Positional Pattern Matching)