목록개발 (194)
파파비의 블로그
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에 제한이 있다. - 정수형..
if문이나 while 문 등의 조건을 따질 때 자주쓰는 and, or등의 표시는&&와 ||이 있다. 단락평가라는 것은 위와 같은 조건문에서 앞의 조건만 따져봤을 때도 바로 결과를 알 수 있다면, 뒤의 조건은 생략하는 것을 의미한다. 예를 들어 x && y 라는 조건문에서는 x가 거짓이면 y의 참거짓 결과에 상관없이 무조건 거짓이다. 따라서 y의 조건은 확인할 필요 없이 거짓이라고 판단하면 된다. 이렇게 생략하는 것을 "단락평가"라고 한다. &&, || 조건은 둘 다 단락평가를 한다. 반대로 &와 |은 의미가 같지만 단락평가를 하지 않는다. 이 둘의 차이를 알아두자.
java는 c#과는 다르게 난수를 만들어내는 방법이 상대적으로 복잡(?)했다. 아무튼 난수를 뽑아내는 순서는 다음과 같다. 1) import java.util.Random; //Random 패키지를 import하기 를 통해 util 패키지를 불러온다 물론 import java.util.*; 를 통해 util 전부를 import해도 상관없다. 2) Random rand = new Random(); // Random 객체를 형성하기 랜덤객체를 형성해야한다. unity에서 c#을 활용했을 때는 그냥 정적메소드를 통해 난수들을 뽑아냈다보니 객체를 형성해야한다는게 어색하고 낯선 포인트로 느껴지는 부분이다. 3) rand.nextInt() // next00~ 을 통해 난수를 뽑아낸다. 여기서 다른 불편한 점이 있었..
c#에서는 데이터를 분류하는 기준 중에 하나로 값형식과 레퍼런스형식이 존재한다. (다른 언어들에도 많이 쓰이는 것으로 알고 있다.) 값형식과 레퍼런스형식은 어떻게 다른 것일까? 값형식은 어떤 변수에 데이터를 할당하면 스택 메모리에 값이 바로 할당된다. 레퍼런스형식은 어떤 변수에 데이터를 할당하면 변수에는 1차적으로 data가 저장된 주소값이 저장된다. 주소값은 정확히는 스택 메모리에 존재하며 data는 힙 메모리에 할당된다. 따라서, 레퍼런스 형식의 data를 호출하면 우리는 data가 존재하는 힙 메모리의 주소를 받게 되고, 값 형식은 주소가 아니라 바로 값을 얻게 된다. 값형식의 경우 int, byte, bool, float, double 등 기본 자료형이 속하며 레퍼런스 형식의 경우, class로 ..