강께르의 개발일지
[문제 풀기] 클래스에 관하여 본문
- const, readonly 차이점 설명
readonly : 런타임 중에 결정된다. 필드 초기화와 생성자 초기화로 사용되며 초기 할당만 허용한다. 사용자 정의 데이터형에 대해서 사용 가능
const : 컴파일 타임 중에 결정된다. 기본 데이터형에 대해서 사용 가능
- 깊은 복사 얕은 복사 설명
깊은 복사 : 복사받을 인스턴스를 하나 생성한 후에 복사해줄 인스턴스의 멤버 값들을 싹 다 복사하는 것
얕은 복사 : 인스턴스 참조값만 복사
- this, base 키워드 쓰이는 곳
this : 멤버와 매개변수의 이름이 똑같아서 구분해야할 필요가 있을 때, 해당 인스턴스로 메소드나 멤버변수를 갖고와야 할 필요가 있을 때, 해당 인스턴스를 매개변수로 전달하고 싶을 때
base : 부모 클래스의 메소드를 호출할 때, 생성자를 명시적으로 선택해야할 때
- 생성자 및 소멸자 호출 순서 정리
생성자 : 최상위 클래스부터 최하위 클래스로
소멸자 : 최하위 클래스부터 최상위 클래스로
- 객체 지향의 다형성 설명
부모 클래스 변수로 자식 인스턴스를 참조할 수 있는 것을 의미. 그리하여서 하나의 부모 클래스 데이터형은 그 클래스를 상속하는 수많은 자식 클래스의 인스턴스를 참조 가능한 것
-> 오버로딩도 다형성이라 이야기할 수 있겠지만 객체 지향의 다형성에서는 위 경우를 이야기하는 게 좋을 것
- 참조형 변수의 형변환 관한 내용
업캐스팅 : 자식 인스턴스는 부모 클래스로 형변환이 가능하다. 왜냐면 이미 부모 클래스 멤버를 갖고 있기 때문에
다운캐스팅 : 부모 인스턴스는 자식 클래스롤 형변환을 할 수는 있으나 부작용이 있다. 부모 인스턴스는 자식 클래스의 멤버를 가질 수 있어도 그에 대한 값이 애초에 없기 때문. 문제가 발생
- 오버라이딩과 오버로딩의 차이점
오버로딩 : 한 클래스 내에서 메소드의 이름이 같지만 다른 매개변수를 가져 메소드들끼리 다르게 구현한 것
오버라이딩 : 부모 클래스에 있는 메소드를 자식 클래스에서 식별자는 같지만 새롭게 바디를 재정의한 것
퀴즈
- int 배열 처럼 동작하는 클래스를 만들어라.
- indexer 에서 경계검사를 해라.
- 리사이즈 기능 추가
using System;
namespace ConsoleApp4
{
class Program
{
static void Main(string[] args)
{
MyArr arr = new MyArr(5);
arr[-1] = 5;
arr[1] = 2;
arr[2] = 3;
arr[3] = 6;
arr[4] = 7;
arr[5] = 1;
for(int i = 0; i < 8; i++)
{
Console.WriteLine(arr[i]);
}
Console.WriteLine();
arr.Resize(2);
for (int i = 0; i < 8; i++)
{
Console.WriteLine(arr[i]);
}
}
}
class MyArr
{
private int[] array;
private int size;
public int this[int arrNum]
{
get
{
if (arrNum >= 0 && arrNum < size)
return array[arrNum];
else
return Int32.MinValue;
}
set
{
if (arrNum >= 0 && arrNum < size)
array[arrNum] = value;
}
}
public MyArr(int n)
{
array = new int[n];
size = n;
}
public void Resize(int n)
{
int[] temp = new int[n];
for(int i = 0; i < size; i++)
{
if (i >= n) break;
temp[i] = array[i];
}
size = n;
array = temp;
}
}
}
'프로그래밍 > C#' 카테고리의 다른 글
[문제 풀기] boxing, unboxing과 인터페이스에 대하여 (0) | 2021.09.17 |
---|---|
[수업] 20210916_4일차 (0) | 2021.09.17 |
[수업] 20210915_3일차 (0) | 2021.09.16 |
[수업] 20210914_2일차 (0) | 2021.09.14 |
[문제 풀기] 문자열에 대해서 (0) | 2021.09.14 |