C# 23

C# 오버라이딩

오버라이딩 메소드 오버로딩과 비슷하지만 다르다. 오버로딩 같은 경우 같은 메소드의 이름을 여러 방법으로 사용이 가능했다면 오버라이딩은 상속 받은 메소드를 새롭게 정의하는 것. 한 마디로 부품을 갈아 끼운다고 생각하면 된다. 녹슨 부품을 새 제품으로 바꾸는거와 같다. 이 방식을 객체 지향의 특성중 하나인 다형성이라고 하는데 오버라이딩을 이용하면 다형성의 이름 답게 다양한 방식으로 사용이 가능하다. 오버라이딩은 virtual과 override 라는 한정자를 이용해서 사용해야하는데 규칙이 존재한다. 1. private를 이용한 선언은 오버라이딩 하지 못한다. 이유는 private는 부모클래스에서만 사용이 되지 오버라이딩 받을 자식 클래스에서는 접근을 제한 받기 때문 2. 부모와 자식 클래스의 접근 한정자가 같..

C# 2022.06.03

C# 상속

상속 여기서 말하는 상속이란 부모가 가지고 있는 속성(변수, 메소드 등)을 자식에게 상속시켜서 자식이 부모의 속성을 사용할 수 있다는 것을 말한다. 상속 받는 방법은 아래와 같다. class 자식클래스 : 부모클래스 클래스명 뒤에 : 부모클래스명을 붙여주면 된다. 상속을 사용하는 이유는 다음과 같다. 개와 고양이는 비슷한 특징을 가진다. (네 개의 다리와 꼬리 등등) 그렇다면 이러한 특성을 각각 따로 만들어 사용하는건 비효율적이다. 그러므로 공통된 특성은 하나의 클래스에 만들어서 개와 고양이 둘에게 상속받아 사용하는 것이 효율적. 그럼 상속에 대해 알아보자 일단 자식클래스는 부모클래스로부터 private를 제외한 모든 걸 물려 받는다. 그리고 물려받은 기능을 사용하려면 base라는 기능을 사용해야 한다...

C# 2022.06.03

C# 접근 한정자

접근 한정자 접근 한정자란 지금까지 사용했던 private, public 등 을 말한다. 이 접근 한정자는 말 그대로 접근을 제한하는 한정자이다. 객체 지향으로 따지자면 정보 은닉에 해당 public 클래스의 내부/외부 접근 protected 클래스 외부에서 접근 불가, 파생 클래스 가능 private 클래스 내부에서만 접근 internal 같은 어셈블리에 있는 코드만 public으로 접근 다른 어셈블리에서는 private 수준의 접근 protected internal 같은 어셈블리에 있는 코드만 protected로 접근 다른 어셈블리에서는 private 수준의 접근 private protected 같은 어셈블리에 있는 클래스에서 상속받은 클래스 내부만 접근 위에서 자주 사용하는 접근 한정자는 publi..

C# 2022.06.02

C# this

this this는 자신을 나타내는 키워드 한마디로 객체가 자기 자신을 나타낼때 쓰는 키워드이다. 여기서 주의할 점. 이 this는 자신만 나타내는 키워드 이다. 만약 static 한정자로 정적으로 만들어버리면 자기 자신을 가리킬 수 없다. 한정자로 지정해버리면 그 필드의 메소드나 변수는 클래스의 고유의 존재이다. 그렇다면 둘 이상 존재하지 못한다. 그래서 본인을 가리키는 this라는 키워드가 필요 없다. 따라서 인스턴스 필드에서만 this 키워드 사용이 가능하다. this 키워드는 자신 객체 내에서 언제나 자기 자신을 가리킨다. 그리고 생성자도 가리킬 수 있다. 생성자는 일반적으로 새로운 객체를 만들때만 불러온다. 바로 new 연산자를 통해서 객체를 만들때 말이다. 하지만 this를 이용해서 생성자를 ..

C# 2022.06.02

C# 얕은 복사, 깊은 복사

얕은 복사 얕은 복사란 다른 객체인데 객체의 변수끼리 서로 연결이 되어 값이 둘다 바뀜. 그 이유는 클래스의 구조가 참조 형식이라서 그렇다. 클래스 끼리 대입 연산을 해버리면 참조를 해버리는 것. 이게 얕은 복사(Shallow Copy)이다. 깊은 복사 얕은 복사는 목적에 어긋나는 복사 방식이다. 서로의 변수를 공유하니 동일한 클래스에 객체를 복사해 사용할 수 없다. 둘 중에 하나가 바뀌면 둘 다 바뀌어 버림. 그래서 깊은 복사(Deep Copy) 라는게 존재 깊은 복사의 원리는 새로운 객체를 만들어서 그 객체와 참조시켜버림. test copy = new test() 새로운 객체를 만들어서 copy.count = this.count; 이 객체의 본 객체의 값을 넣는다. (this 란 자기 자신을 가리킴)..

C# 2022.06.02

C# 생성자와 종료자

생성자 생성자의 역할은 객체의 생성과 동시에 초기화를 해주는 역할을 한다. 클래스에 처음 입문하고 객체에 인스턴스를 하기 위해 생성자를 사용했는데 우리는 생성자를 만든 적이 없는데 어떻게 생성자가 있는지 의문이 들었을 텐데 컴파일러는 생성자가 없다면 따로 기본 생성자를 만듦. 그래서 생성자를 따로 만들지 않아도 사용이 가능하다. 또 생성자는 하나라도 만들게 되면 컴파일러는 기본 생성자를 제공하지 않는다. 기본 생성자를 제공한다고 하여 생성자를 만들지 않게 되면 쓰레기 값이 들어가 원하지 않는 결과를 초래하게 된다. 초기화는 습관이다. 생성자는 메소드 오버 로딩이 가능. 초기화가 필요한 경우 생성자를 꼭 만드는 게 좋다. 종료자 C++에서는 종료자와 같은 역할을 하는 소멸자가 있음. 종료자의 형식은 아래의..

C# 2022.06.01

C# 클래스

클래스 클래스란 객체 지향 언어의 대표적인 기능중 하나이다. 객체 지향이란 모든게 클래스에 집중 되어 있음. 다형성 정보 은닉 캡슐화 상속 이 모든게 클래스 하나에 전부 들어 있다. 클래스는 데이터 형식중 복합 데이터 형식에 포함된다. 이전에 스택과 힙을 설명 했을때 참조 형식이라는 말을 했었는데 값 형식은 기본 데이터 형식이고 참조 형식은 복합 데이터 형식이다. 클래스가 복합 데이터 형식이라면 힙 영역에 할당이 된다. 실제로 C++ 에서도 클래스 객체는 인스턴스를 하면 힙에 할당이 됨. new 키워드와 생성자 new 키워드는 C++ 에서는 메모리에 할당하는 키워드로 사용 C#에서는 조금 다름. 인스턴스의 역할은 동일하나 new 키워드는 C#의 생성자와 같이 사용해야 클래스가 인스턴스 된다. 그리고 클래..

C# 2022.06.01

C# 로컬 함수

로컬 함수 함수와 같은 기능을 하는 이 로컬 함수는 메소드 내에서만 사용이 가능. 한 마디로 클래스에는 사용이 불가 유사 메소드라고 생각하시면 됩니다 물론 메소드 내에서 많이 쓰게 되는 식이 있다면 로컬 함수를 사용 반대로 전체적으로 많이 쓰게 되는 식은 메소드로 구현을 하면 됨 두 차이를 이해 하면 문제 없음 그리고 이 로컬 함수는 메소드 내에 있는 지역 변수를 사용할 수 있다. 증명은 위의 소스에서 count++; 로 증명이 됐다. int plus(int m_a, int m_b) 매개변수의 변수명을 선언한 변수와 일부로 다르게 줌 P.S 로컬 함수는 스택의 저장 공간을 사용합니다. 그래서 위의 count 변수의 값이 유지 된 상태로 2라는 값이 나옴. 즉, 메인에서 로컬 함수를 사용하면 메인이 끝나기..

C# 2022.06.01

C# 메소드 오버로딩

메소드 오버로딩 C++ 에서는 함수 오버로딩 역할은 똑같다. 객체 지향의 다형성을 보여주는 부분. 오버로딩의 규칙은 간단하다. 매개변수의 개수가 다르면 된다. 매개변수의 개수가 같다면 자료형이 다르면 된다. 그리고 오버로딩의 매력도 매력이지만 오버로딩에 준하는 기능을 가진 매개변수도 존재함. 가변길이 매개변수 이 가변길이 매개변수의 특징은 바로 배열을 사용한다는 점. 이 매개변수는 params라는 키워드를 사용하면 됨 참고로 string 문자열도 지원. 명명된 매개변수 그리고 또 엄청난 기능 가독성면을 봤을때 최고인듯 매개변수 디폴트 값 C# 에서는 선택적 매개변수 라고도 말함. C++ 에서 디폴트 값과 동일한 기능 디폴트 값은 매개변수의 맨 뒤부터 작성을 해주는 걸로 약속이 되어 있음. 도착점만 알려주..

C# 2022.06.01