목록분류 전체보기 (214)
파파비의 블로그
c#에서 모든 배열들은 System.Array를 상속 받았다. 그래서 Array class의 메소드나 프로퍼티를 공유하는데 쓸모있는 것들을 파악해보자 Length (인스턴스 프로퍼티) Sort (정적 메소드) Copy (정적 메소드) System.Array는 ValueType을 상속하지 않았다. 한마디로 참조형 타입이라는 것!
c#에서 가장 상위의 class는 오브젝트 클래스이다. 1. 클래스를 만들 때 아무런 상속 표시를 하지 않는다면 자동으로 object class를 상속하게 된다. 2. object는 참조형 class이다. 그러나 하위에 valuetype이라는 class를 만들고 이를 상속하는 class들은 전부 값형식이다. 3. object는 c#의 키워드이다. 닷넷프레임워크 형식은 System.Object이다. 그런데 보통 System 네임스페이스를 사용하는 경우가 많아 Object만 쳐도 되는데, 그래서 object랑 Object랑 뭐가 다른지 궁금하게 느껴졌을 수도 있는데, 사실은 둘이 같다. 4. object는 4개의 함수가 구현되어있다. - ToString, GetType, GetHashCode, Equals ..
형변환에 대해서 저번 글에 적어둔 내용을 보면 명시적 형변환을 할 경우, 잘 못 했을 경우 컴파일 단계가 아닌 런타임에서 에러를 발생할 수도 있다. 이것은 프로그래밍 과정에서 큰 비용을 가져온다. 그래서 그 해결책으로 나온 것이 as 라는 키워드이다. as는 컴파일단계에서 에러를 발생시키나? 그것은 아니고, as로 형변환을 할 경우, 성공하면 형변환된 객체가 반환되고 실패하면 null을 반환한다. 에러로 멈추는 것이 아니라서 처리만 잘 해준다면 더욱 효율적으로 처리가 가능하다. 그래서 예를 들어 부모 class의 computer와 그의 자식 class notebook 이 있다고 가정하면 computer com = new computer(); notebook nt = com as notebook; if(n..
다형성은 객체지향 프로그래밍의 특징중 하나이다. 이 개념을 이해하는 데 참 오랜 시간이 걸렸던 것 같다. 오늘은 형변환에 대한 부분을 복습하며 다형성에 대해서도 정리해보고자 한다. 다형성은 다양한 형태를 갖고 있음을 의미하는데, 그 것을 이해하려면 먼저 형변환을 이해하여야 한다. 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..