C#의 제네릭은 타입을 특정하지 않고 데이터 타입 패러미터를 받아서 원하는 방식으로 처리를 해주는 방식이다. ex) public static void test (T left, T right) where T ~ 이렇게 생긴 친구들. T가 데이터 타입 패러미터라고 할수 있다. - 주로 컬렉션과 함께 사용해야 유용하다고 하는 의견들이 많다고 한다. 하지만, 인터페이스, 이벤트 핸들러, 공통 알고리즘에도 유용하다. - 제네릭 방식 -> 장점: 코드 짧아진다, 데이터가 준다, 박싱, 언박싱을 피할수 있다. 단점: 메모리 풋프린트가 많이 든다. (서로 다른 타입이 제네릭을 이용해 선언된다면, 서로 다른 머신 코드가 계속 파생되기 때문) List s, List d.. => 제네릭이 아닐 경우 하나의 머신코드 but,..
C#은 정적타이핑, 즉 데이터 타입을 미리 선언해줘서 컴퓨터의 부담을 덜어줄수 있다고 한다. 타입 불일치가 발생하더라도 컴파일러가 이를 확인해준다. object타입의 인자를 취하는 경우도 있는데, 이때 클래스나 혹은 인터페이스로 형변환하여 사용한다. 이렇게, 형변환의 사용이유들이 있는데, 그렇다면, c#에서는 형변환을 어떻게 할까 크게 두가지가 있다. 캐스팅과 is이다. 형변화을 할때 is를 사용하여 방어적인 코드, 쉽게 말해 null체크 같은 예외적인 상황을 대비 할수 있게 해준다. 캐스팅을 사용한다면, try-catch문으로 exception체크를 해줘야하는데, 가독성이 떨어진다. 반면, as를 사용할경우 형변환 실패시, null이 반환되므로 null체크만 해주면 되는데, 가독성 면에서 유리하다. a..
-왜 쓰는가? 프로퍼티는 속성이라는 의미가 있다. 이 프로퍼티를 사용하여 필드의 은닉성, 편의성을 고려하여 만들수있게 해주는 편의한 기능이다. 처음에는 솔직히 왜 쓰는지 이해가 가지 않았다. 그냥 다른 곳에서 쓰게 되면 public으로 클래스 내부에서만 쓰게 되면 private으로 쓰면 되지 않나 싶었다. 그래서 검색으로 해보니 코드가 길어지고 복잡 해질수록 데이터를 누가 어디서 가공하게 되는지 애매 해지고, 중요한 데이터일 경우 데이터가 원하는 방향이 아닌 식으로 변환 될수도 있다고 한다. 이를 방지 하기 위해서 은닉성을 추구하고, 어디서 데이터가 바뀐는 지 보기 쉽게 하기 위해, 프로퍼티를 사용한다고 한다. 또한, 데이터가 set, get이 불러올때 메소드를 정의하여 가공할수 있으니, 편리하다. 쉽게..
-계기 text컴포넌트에서 html태그를 활용하여 글자색을 바꾸는 등, 글자를 꾸미거나 할수 있다. 하지만, 많은 기능을 제공하지 않고 있고, text mesh pro를 사용하여야 원하는 태그를 사용할수 있다. 그래서 text를 이용하여 tmp에서 제공하는 태그 기능을 만들어 볼수 있지 않을까? 생각하여, parser를 만들어 보았다. 거두절미하고, 결과는 만들기 어렵다(가능하지만, 투자시간이 너무 오래걸리고, 기존에 계획했던 방식으로는 할수 없었다)였다. 특정 text를 클리하였을 때, 이벤트를 주고 하려면 그text의 coordinate값이 필요한데, text에서는 없고, tmp에서는 인덱싱 별로 좌표값을 받고 있었던것이었다..물론 방법을 꾸준히 찾다 보면 있을수도 있겠지만, 나는 스택계산긴를 활용하..
-들어가기에 앞서 객체지향 방식으로 개발을 하다보면, 클래스, 인스턴스화, 생성자, static 등 여러 용어가 나오면서 참조를 한다거나, 인스턴스를 만들어서 값만 변경해준다거나 하는 말을 많이 들어 봤을 것이다. 이러한 말을 이해 하기 위해선 작업 영역에 대한 근본적인 이해가 수반되어야 한다. 이번에는 이를 위한 내용을 다뤄 보고자 한다. 스택(stack) & 힙(heap) 스택(stack): 비교적 불안전한 메모리 영역이라 생각하면 좋다. 주로, int, double, float등 값타입의 메모리들이 들어간다. 이전 struct에서 다뤘던 내용에서 박싱과 언박싱에서 스택에 값이 들어가고 참조가 힙에 들어가는 이미지를 참고 하면 좋을 듯하다. 힙(heap): 안정적인 메모리영역. 주로 참조 타입이 머무..
객체지향의 4가지 속성 - 추상, 캡슐, 상속, 다형성 추상화 (Abstraction) 객체들의 공통적인 특징(기능, 속성)을 추출해서 정의하는 것 실제로 존재하는 객체들을 프로그램으로 만들기 위해 공통적인 특성을 파악한 후, 필요 없는 특성을 제거해 하나의 묶음으로 만들어내는 과정을 가르킨다. 객체지향적 관점에서는 클래스를 정의하는 것을 추상화라고 할 수 있다. ex) 게임에 대포를 만드는데 뭔가 필요할까..탄두방향 필요할것 같고, 탄두 범위도 필요할것같고, 공기저항은 총알에 줄까? 이런과정이 추상화 -> 이렇게 하면 큰대포, 작은 대포 등등 추가하여 쓸수 있다. 추상화하였기에. 쉽게말해, 프로그래밍에 들어가기 앞서 설계하는 단계라고 생각하면 된다. 캡슐화 (Encapsulation) 외부에서 객체를 ..
- 객체지향 프로그래밍은 우리 주변에서 매우 쉽게 보이는 프로그래밍 방식이기도 하고 대규모 프로젝트 단위에서 자주 쓰이기 때문에, 필수적인 요소가 된지 이미 오래이다. 그렇다면, 객체지향이란 무엇이고, 왜 나왔으며, 어떻게 만들어야 하는 것인가? 알아가보도록 하자. 객체지향이란? - 객체란, 존재하는 모든 것을 의미한다. 흔히 객체(object)란 말을 들으면, 질량을 가진 어떤 것을 떠올리곤 하는 데, 실상은 존재하는 모드것을 칭한다. - 특히, 프로그래밍의 관점에서 본다면 데이터 + 기능 으로 이루어진다. 즉, 변수와 메소드로 이루어진 것이 객체란 것이다. - 이렇게 객체로 묶어진 단위의 프로그래밍을 한다면, 데이터 분산의 위험을 예방하고, 데이터와 기능을 하나로 묶어줄수 있기에 직관적으로 받아들이기..
infix에서 postfix방식으로 전환하는 스택 계산기의 예제 infix란 일반 표기번을 의미한다. 1+((a+2)*5)/7) postfix란 후위 표기법으로 1a2 + 5 * 7 /+로 나타 내어 진다. 논리 순서로 보자면, 괄호안의 연산이 밖으로 빠져 나가는 것이다. 1+((a2)+*5)/7) -> 1+((a2)+5)*/7) -> 1+((a2)+5)*7)/ -> 1((a2)+5)*7)/+ -> 마지막으로 괄호를 없앴을 때, 1a2 + 5 * 7 /+로 나타나 진다. 이후, 연산자가 나왔을때, 스택에서 피연산자 두개를 꺼내서 계산후 다시 집어 넣으면 + : a+2 * : (a+2) *5 / : (a+2) * 5 / 7 + : (a+2) * 5/ 7 + 1로 잘 나타난다. 이를 코드로 나타내어 본다면,..