C#/기본기

C#/기본기

[C#] 인터페이스 - 1. 인터페이스는 약속이다

인터페이스 - 약속의 의미 클래스는 객체의 청사진이라면 인터페이스는? 클래스의 청사진 즉, 클래스가 해야하는 행동 (= 메소드)를 결정 인터페이스의 실제 선언 예) interface ILogger { void WriteLog( string Message ); //구현부가 없다! } - 선언할 떄 주로 인터페이스 이름 앞에 I를 붙이는 것이 관례 - 인터페이스는 메소드, 이벤트, 인덱서, 프로퍼티만 가질 수 있는데 구현부가 없다. - 클래스는 접근 제한 한정자로 수식하지 않으면 기본적으로 private으로 선언되지만, 인터페이스는 접근 제한 한정자를 사용할 수 없고 모든 것이 public으로 선언된다 - 그리고 인터페이스는 인스턴스도 만들 수 없다 - 하지만, 이 인터페이스를 상속받는 클래스의 인스턴스를 ..

C#/기본기

[C#] 구조체(struct)

구조체 - 필드와 메소드를 가질 수 있는 등 클래스와 상당히 유사 - 데이터를 담기 위한 자료구조로 사용되기 때문에 굳이 은닉성을 비롯한 객체지향의 원칙을 구조체에 강하게 적용하지 않는 편 - 따라서 편의상 필드를 public 으로 선언하는 경우가 많음 - 클래스와 다르게 구조체는 "값 형식" 특징 클래스 구조체 키워드 class struct 형식 참조형식(힙에 할당) 값 형식(스택에 할당) 복사 얕은 복사 깊은 복사 인스턴스 생성 new 연산자와 생성자 필요 선언만으로도 생성 생성자 매개변수 없는 생성자 선언 가능 매개변수 없는 생성자 불가능 상속 가능 값 형식이므로 상속 불가능 구조체는 값 형식이다 따라서 구조체의 인스턴스는 스택에 할당되고 인스턴스가 선언된 블록이 끝나는 지점의 메모리에서 사라진다 ..

C#/기본기

[C#] 읽기전용(readonly) 필드

readonly 필드를 다루지만 9장까지 공부한 내용으론 readonly키워드는 1. 필드 : 한번 값을 지정하면 그 후로는 값을 변경할 수 없는 필드 2. 구조체 : readonly struct로 변경불가능 구조체 선언, => 모든 필드,프로퍼티에 일일이 readonly수식 3. 메소드 한정자 형식을 readonly로. 구조체에서만 선언가능. 이때 구조체는 readonly로 수식안해도 사용가능. 메소드에게 상태(속성-필드,프로퍼티)을 바꾸지 않도록 강제 의 3가지에 사용가능하다 (공부한것 까지론 일단 3가지) readonly 필드 - 한번 값을 지정하면 그 후로는 값을 변경할 수 없는 필드 - 읽기 전용 필드는 생성자 안에서만 최초 1회 초기화 가능하다 (반면 const는 코드를 작성한 순간 아예 변경..

C#/기본기

[C#] 오버라이딩(override), 메소드 숨기기(new)

오버라이딩 파생클래스에서 부모의 같은이름을 가진 메소드를 재정의하는것 부모메소드 - virtual로 수식 => 메소드를 정의할때 부모메소드를 파생할 클래스가 부모의 구현에 한정되지 않도록 앞을 내다봐 virtual로 길을 열어준다 public virtual void Initialize() { // } 이렇게 virtual로 가상메소드를 선언한다. (추상메소드 abstact와 반대되는 개념) 파생메소드 - override로 수식 public override void Initialize() { // } 참고로, 오버라이드를 하지만, 부모의 유사를 버리고 싶지 않을 때 추가로 base키워드를 써서 base.Initialize(); 를 해주면 이는 파생에서 재정의한 메소드가 아닌 "부모" 의 Initialize..

C#/기본기

[C#] 기반클래스와 파생클래스 사이의 형식변환

https://blog.naver.com/bamsunbic/221370090169 C# 5. 다형성, 형변환 다형성(Polymorphism) 다형성은 여러 가지 형태를 가질 수 있는 것을 의미합니다. < 다형성의 두 가지 ... blog.naver.com 기반클래스와 파생클래스 사이에서는 족보를 오르내리는 형식 변환이 가능 파생 클래스의 인스턴스는 기반 클래스의 인스턴스로서도 사용 가능 먼저 왜 기반, 파생 사이의 형변환이 필요한지부터 알아보자. 1. 다형성과 유연성 가장 중요한 이유이다. 다형성은 코드의 재사용성과 유연성을 향상시키며, 객체 간의 관계를 간결하게 표현할 수 있다. 2. 멤버의 개수 조절 여러자료를 찾아본 결과 형변환은 참조하고 있는 인스턴스에서 사용할 수 있는 멤버의 개수를 조절하는 역..

C#/기본기

[C#] 상속

클래스는 다른 클래스로부터 유산을 물려받을 수 있다 부모클래스 -> 자식클래스 (= 기반클래스 -> 파생클래스) class 기반클래스 { //멤버 } class 파생클래스 : 기반클래스 { //아무 멤버를 선언하지 않아도 기반클래스의 모든것을 물려받아 가지게 됨 //단, pivate으로 선언한 멤버는 예외 } 파생클래스는 객체를 생성할 때 내부적으로 기반클래스의 생성자 호출 → 자신의 생성자 호출 객체가 소멸할 때는 반대의 순서로 (파생클래스 → 기반클래스)로 종료자를 호출 그렇다면 만약 기반클래스의 생성자가 매개변수를 입력받도록 선언되어 있다면 파생클래스의 인스턴스를 생성할 때 호출되는 기반 클래스의 생성자에는 어떻게 매개변수를 전달해 줄 수 있을까? ====> base키워드 사용! this가 자기자신..

C#/기본기

[C#] this 키워드

this는 객체가 자신을 지칭할 때 사용하는 키워드 https://zizh.tistory.com/43 [C#]클래스와 생성자 클래스 이 세상에서 객체라고 할만한 모든 것이 갖고 있는 두가지 : 속성과 기능 C#의 객체 : 속성 -> 데이터, 기능 ->메소드 필드 : 클래스 안에 선언된 변수들 멤버: 필드와 메소드를 비롯하여 프 zizh.tistory.com 위 포스팅에서 객체 외부에선 인스턴스를 만들고 kitty라는 주소로 Cat객체를 가리켜 사용하면 되지만 객체 내부에선 kitty이름을 알 수 가 없다. 내부에선 자기자신을 어떻게 부를까? = this사용 이라고 했었다 this는 객체가 자신을 지칭할 때 사용하는 키워드이다 객체외부에선 객체의 필드나 메소드에 접근할 때 객체의 이름(변수 또는 식별자)를..

C#/기본기

[C#] 정적(static) 필드와 메소드

정적(static) 필드 static :사전적으로 정적이라는 뜻을 가지고 있음. -움직이지 않는다 C#에서의 static : 메소드나 필드가 클래스의 인스턴스가 아닌 클래스(의 멤버) 자체에 소속되도록 지정하는 한정자 그 틀을 이용한 인스턴스가 여러개 존재할 수는 있으나 클래스는 프로그램에 유일하게 존재. 그리고 어떤 필드가 클래스에 소속된다는 것은 곧 그 필드가 프로그램 전체에서 유일하게 존재한다는 것을 의미 static으로 한정하지 않은 필드: 자동으로 인스턴스에 소속됨 static으로 한정한 필드: 클래스에 소속됨 왜 static필드를 쓸까? 아까도 말했듯이 static으로 수식한 필드는 프로그램 전체에 걸쳐 하나밖에 존재하지 않음 => 프로그램 전체에 걸쳐 공유해야 하는 변수가 있다면 정적 필드를..

파워지훈
'C#/기본기' 카테고리의 글 목록 (2 Page)