목록개발/c# (17)
파파비의 블로그
다형성은 객체지향 프로그래밍의 특징중 하나이다. 이 개념을 이해하는 데 참 오랜 시간이 걸렸던 것 같다. 오늘은 형변환에 대한 부분을 복습하며 다형성에 대해서도 정리해보고자 한다. 다형성은 다양한 형태를 갖고 있음을 의미하는데, 그 것을 이해하려면 먼저 형변환을 이해하여야 한다. short라는 타입은 int 범위에 포함된다. 그리고 int는 정수라는 범위에 포함된다. 정수 > int > short의 순서에서 short로 갈수록 제한된, 특수한 범위에 해당한다. short는 무조건 int이며, int는 무조건 정수이다. 그래서 형변환이 가능하다 형변환은 형태를 변화시키는 것이다. 형변환은 2가지 종류가 존재한다. 암시적 형변환과 명시적 형변환이다. 암시적 형변환은 굳이 말하지 않아도 자연스럽게 되는 형변환..
private 접근제한자는 본인 class외에는 아무도 접근할 수 없는 영역이다. - 자식 class 역시 접근 불가능하다. public 접근제한자는 누구나 접근할 수 있는 영역이다. 객체 지향에서는 상속이라는 개념이 있다. 자식에게 메소드나 속성 등을 상속하고 싶은데, 공개는 하기 싫을 때 사용하는 접근제한자가 바로 protected 이다. protected는 외부에는 공개하지 않으나, 자식 class는 접근이 가능하다. ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ sealed class program 이라는 클래스는 더 이상 자식 class를 만들 수 없다. sealed라는 키워드 때문이다. 흔하지는 않지만 가끔씩 상속을 막고 싶을 때가 있다. 그럴 때 sealed..
c#에는 특이한 기능이 있는데, 바로 yield + return을 함께 쓰는 것이다. IEnumerable Func() { yield return T1; yield return T2; yield return T3; yield return T4; } 이런 함수가 있다고 해보자. 이럴 경우 Func를 호출하면 맨 처음에는 T1이 return된다. 그 다음에 호출하면 T2가 호출 되며, 그 다음 호출하면 T3가 호출된다. Func를 맨 처음 호출하면 yield return까지 실행된다. 그 후 또 호출하면 그 다음 yield return까지 실행된다. 그렇기에 위와 같은 결과가 나온다. 는 안에 다양한 타입을 넣을 수 있다는 것이며, return의 type을 말하는 것이다. 유니티에서는 이 것을 활용해서 코루..
c#에서는 에러 핸들링을 어떻게 할까? 정답은 : try - catch 문이다. 다른 언어를 접해보신 본 사람들이라면, 쉽게 이해할 부분일 것 같다. 1. 에러가 나올 법한 부분을 try 구문으로 감싸준다. 2. try 구문안에서 에러가 발생하면 catch에서 잡아준다. 3. catch 파라미터는 - Exception만 와도 되고 (class) - Exception ex 처럼 객체를 넣어도 된다. 그럴 경우 ex에 에러에 대한 정보가 전달된다. - Exception은 모든 에러를 캐치한다. - IndexOufIndexOutOfRangeException와 같은 좁은 범위의 에러를 넣으면 해당 에러만 캐치한다. - catch 구문은 여러 개를 만들 수 있다. - 앞에 특수한 에러들을 검토하고, 그 뒤에는 나..
반복문, loop에서 쓰이는 키워드, 예약어이다. break를 만나면 해당 loop를 즉시 중단한다. 그렇다면 중첩 루프의 경우 break는 어떻게 될까? break는 본인이 속해있는 블록의 loop만 탈출한다. 즉, 루프안의 루프에서break가 실행됐다면, 상단의 loop는 계속 진행된다. loop에서 continue를 만나면, 더 이상 진행을 중지하고 조건절(while의 경우), 반복절(for의 경우)로 돌아간다. continue는 loop 자체를 중단하는 것은 아니다. 그냥 해당 턴에서 끝까지 가지 않고 턴을 끝낸다고 보면 된다. break와 continue 같은 경우 loop에서 가독성을 높이기 위해 사용되기도 한다. 예를 들면) 0-1000까지, 2,3,5의 배수가 아닌 수들의 합을 구해보자 i..
if 문을 사용하여 다양한 분기를 나타낼 수 있다. if( ~ ) else if ~ else if ~ ... else~ 이렇게 말이다. 하지만 이렇게 분기가 많아질 경우 가독성이 떨어지는 경우가 있다. 그럴 땐 switch 구문으로 바꾸어서 표현해보자! 물론, 항상 if switch가 되는 것은 아니다. 그러니 switch의 구문의 표현을 잘 이해해야 한다. switch구문을 사용하는 방법은 다음과 같다. switch(인스턴스){ case (값1) : 구문; break; case (값2) : 구문 break; .... default : 구문 break; } 여기서 핵심적으로 짚고 넘어가야할 부분은 다음과 같다. 1. 인스턴스 - 객체지향에서의 인스턴스를 의미하기는 하나 type에 제한이 있다. - 정수형..
c#에서는 데이터를 분류하는 기준 중에 하나로 값형식과 레퍼런스형식이 존재한다. (다른 언어들에도 많이 쓰이는 것으로 알고 있다.) 값형식과 레퍼런스형식은 어떻게 다른 것일까? 값형식은 어떤 변수에 데이터를 할당하면 스택 메모리에 값이 바로 할당된다. 레퍼런스형식은 어떤 변수에 데이터를 할당하면 변수에는 1차적으로 data가 저장된 주소값이 저장된다. 주소값은 정확히는 스택 메모리에 존재하며 data는 힙 메모리에 할당된다. 따라서, 레퍼런스 형식의 data를 호출하면 우리는 data가 존재하는 힙 메모리의 주소를 받게 되고, 값 형식은 주소가 아니라 바로 값을 얻게 된다. 값형식의 경우 int, byte, bool, float, double 등 기본 자료형이 속하며 레퍼런스 형식의 경우, class로 ..
c#에서는 타입을 분류하는 다양한 기준들이 있지만, 그 중에는 mutable과 immutable로도 나눌 수 있다. 이 둘의 나누는 기준은 "할당한 data를 변경 가능하냐?" 이다. 예를 들어보자면, int는 mutable한 type인데. int num = 3 으로 할당할 경우, 스택 메모리상에 할당된다 (int는 값형식이니까..) 스택 메모리 100번지에 할당 됐다고 가정해보자, 그 뒤에 num = 4; 로 값을 바꿀 경우, 동일한 메모리상에서 값이 변경 된다. 스택 메모리 100번지에 값은 3이 아니라 4가 되는 것이다. 반대로 string은 immutable 한 type이다. string a = "hello"의 경우, 힙 메모리에 저장된다.(string은 레퍼런스 형식이기 때문이다) 힙 메모리 1..