목록Language/C++, C# (18)
ecsimsw
scope resolution operator stackoverflow_ C++ : what is :: for? namespace - 복수개의 header를 사용할 때, header 안 멤버가 중복될 경우를 방지하기 위해 공간을 마련. 같은 이름의 함수 print가 A.h / B.h에서 정의된다고 가정할 때 아래와 같은 방식으로 혼란을 피한다. sol1) Scope resolution operator int main(void){ A::print(); B::print(); } sol2) namespace using namespace A; int main(void){ print(); B::print(); }
params - params는 함수에 가변 개수의 파라미터를 정의하기 위한 키워드다. 더하기 함수를 만든다고 가정하자. 더하기 함수의 피연산자의 개수가 고정적이라면 거기에 맞는 함수를 만드는 것은 문제가 없을 것이다. 예를 들어 두개의 피연산자만을 갖는 덧셈이라면 파라미터에 두 변수를, 세개의 피연사자만을 갖는 덧셈이라면 파라미터에 세개를 주면 되는 것이다. 또, 2개일 때도 있고, 3개일 때도 있다면 단순히 개수로 오버로딩 시켜 함수를 정의하면 된다. params 키워드는 이렇게 고정적이거나 단순한 상황이 아닌, 말그대로 파라미터의 변수 개수가 가변적일 때 사용한다. 한 함수만으로 파라미터가 몇 개 일때 이든 처리할 수 있는 것이다. "params example" class program { stati..
Accessing variable value by name - 변수 이름으로 필드내의 public 변수에 접근하여 그 값을 가져오는 방법. class Program { static void Main(string[] args) { Test1 test1 = new Test1(); test1.AccessOtherMember(); } } class Test1 { public int R1= 10; public void AccessOtherMember() { var accessedR1 = this.GetType().GetField("R1").GetValue(this); Console.WriteLine(accessedR1); } } - 리플렉션을 공부할 것!
object / var / dynamic object - object 클래스는 모든 클래스 중에서 기본 클래스로, 모든 데이터 타입의 루트형이다. object는 모든 데이터형을 참조할 수 있지만, 해당 데이터 형의 특성을 잃어 해당 데이터형의 특성을 살리기 위해선 캐스팅을 필요로한다. 또 바꿔말하면 어떤 형으로든 캐스팅 가능하다. "object" static void Main(string[] args) { int int_integer = 3; string str_string = "Hello"; object obj_integer = int_integer; // boxing Console.WriteLine(obj_integer + int_integer); // error Console.WriteLine((i..
Iterators/ IEnumerator, IEnumerable / Yield Iterators - Iterators(반복기)는 리스트나 배열과 같은 컬렉션을 단계별로 실행, 반복 조사할 때 유용한 개념이다. IEnumerator / IEnuerable - foreach문이 컬렉션 속 개별 객체들을 하나 꺼내와 처리하고 다른 객체를 꺼내와 처리하는 것이 반복될 수 있는 까닭은, 컬렉션을 반복하는 데 필요한 코드를 생성하기 위해 .NET Core 라이브러리에 정의된 IEnumerable/ IEnumerator Interface 를 상속하였기 때문이다. IEnumerable은 메소드로 GetEnumerator를 갖고 있어 컬렉션의 Enumerator를 반환하고, "IEnumerable" class Progr..
is / as is - is 는 캐스팅이 가능한지를 확인하는 키워드이다. 캐스팅이 가능하면 true, 불가능하면 false를 리턴하는 것으로 객체와 참조 변수의 관계만을 확인 시켜준다. class Program { static void Main(string[] args) { Car myCar = new benz(); if(myCar is benz) { Console.WriteLine("casting"); } } } class Car{} class benz : Car{} as - as 는 캐스팅이 가능하다면 바로 캐스팅을 시켜주고 아니라면 null을 리턴한다. (Car_benz as Benz).print()와 같이 캐스팅 후 다른 참조 변수 대입없이 바로 메소드 호출이 가능하다. class Program ..
Casting Introduction - Dev korea에 c# 상속/ casting에 대한 질문을 보게 되었고, 사용법 자체를 중요시 했던 처음 c# 공부와 다르게 이번에는 그게 객체지향 측면에서 왜 중요한지, 실제 어떤 개념을 구현할 때 필요할 지를 고민하면서 Casting과 상속에 대해서 공부하였다. - 이번 캐스팅 관련 공부 목표는 다음 두가지이다. 1. 'Up casting / Down casting' 을 왜 사용하는가 2. 'Parent objectName = new Child()' 가 의미하는 바가 정확히 무엇인가. Up casting / Down casting Example _ up casting - 다음의 예시를 생각해보자. 3가지 경주용 자동차가 있고, 자동차의 시동을 거는 방법은 차..
Class & Struct Class & Struct 앞서 참조와 값 형식의 차이에 대해서 공부하였고 struct와 class를 비교하여 공부하면 더 명확하게 이해 할 수 있을 것이라고 생각하였다. 두 형식 모두 같은 기능이나 속성을 갖은 것들을 캡슐화하기 위한 장치인 것과 형식적인 차이점은 알고 있으나, 두 개가 어떤 차이가 있는지, 만약 그 쓰임이 같거나 한쪽이 우월하다면 다른 쪽 도구는 왜 존재하는지가 궁금하여 공부하였다. Class & Struct _ Usage aspects - 우선 사용 측면에서의 다른 점은 다음과 같다. 1) struct는 값 형식, class는 참조 형식이다. : struct는 new 연산자 없이 생성해도 자체 호출이 되서 생성이 가능하다. : 개체 복제 시 struct는 ..