[[TableOfContents]] == 개요 == * 본격적으로 시작해볼까요? ~~본격적이 아니었어?!~~ 객체 지향의 세계로! == 참가자 == * [신형철], [이승현], [홍성현], [유성현], [김상렬], [강민승] == 진행 시간 == * 수요일 저녁 7시 ~ 저녁 9시 == 진행 예정 내용 == * 다소 중요하다고 생각된 내용은 [[HTML(보라색 볼드(굵게))]] 처리하였습니다. * #3. 클래스와 객체지향 Part.#1 * [[HTML(클래스와 인스턴스)]] * [[HTML(new 연산자)]] * [[HTML(데이터 멤버와 메서드 정의)]] * [[HTML(생성자와 소멸자, 기본 생성자)]] * GC와 소멸자 * [[HTML(정적 데이터 멤버와 정적 메서드)]] * [[HTML(정적 생성자(Static Constructor))]] * 네임스페이스와 클래스, using을 통한 네임스페이스 선언 * C#에서의 FQDN * [[HTML(C#에서의 접근 제한자)]] * [[HTML(접근자 메서드와 설정자 메서드, 그리고 속성(Property))]] * 문맥 예약어 * 가변 객체와 불변 객체 * [[HTML(클래스 내 데이터 멤버로써의 상수)]] * [[HTML(readonly 데이터 변수)]] * [[HTML(메서드 오버로딩)]] * [[HTML(연산자 오버로딩)]] * 중첩 클래스 * #4. 클래스와 객체지향 Part.#2 * [[HTML(C#에서의 클래스 상속)]] * 봉인된 클래스(Sealed class) * [[HTML(클래스 상속 관계에서의 형변환)]] * [[HTML(as 연산자와 is 연산자)]] * 남은 항목에 대해서는 시간 관계상 다음 진행으로 미뤘습니다. == 진행 == === 내용 요약 === ==== 3. 클래스와 객체지향 Part.#1 ==== 객체(object)와 클래스(Class)에 대한 설명 - object에 대한 일반적인 개념이 바로 Class (ex> 책 - Class, 열혈강의 C++ - Object) Class를 이용해서 Object를 만드는 것을 instance를 만든다고 부른다. 클래스는 속성(data, 필드)과 행위(메서드 == 함수)를 갖는다. 클래스 선언 하는 법 {{{ class A { } ex> class Book { string name; string author; decimal isbn; void Open() { } } }}} 객체를 만들 때는 new를 사용한다 new를 하면 생성자(Constructor, Ctor로 줄여서라고도 씀)가 호출된다. 생성자는 return 타입이 없다 생성자를 아무것도 정의하지 않았으면 기본 생성자(매개 변수도 없는 기본 껍데기)를 만들어서 넣어 준다. ex> 위의 Book class에서 기본 생성자는 public Book() { } 소멸자(Destructor를 dtor로 줄여서라고도 씀) C++과 동일하게 ~ClassName()를 사용. 소멸자는 무조건 매개변수가 없어야 함. 소멸자에는 접근 제한자(public, private, protected 등)를 쓸 수 없다. 소멸자는 언제 호출되는지? CLR ==> GC, 안 쓰는거 같으면 알아서 지워줌. 근데 GC가 동작하는 시점은 아무도 모른다. 근데 소멸자를 명시적으로 호출할 수 없음 소멸자는 평상시에는 GC가 알아서 해주니까 쓸모가 없음. 관리 메모리(GC), 비관리 메모리(GC가 관리 안 함, C 또는 C++에서의 동적할당과 비슷함) --> 비관리 메모리에서 소멸자를 사용. 그래도 명시적으로 호출은 못 하고 비관리 메모리를 할당해제 해주는 함수가 있음 static 클래스 --> 데이터 멤버(필드) + 메서드 멤버 --> 인스턴스 static은 '정적'이라는 의미, 개념(Class)과 관련이 있지 사물(instance)와는 관련이 없음 Class에서 정의해둔 static method는 instace에 점 찍고 쓰면 에러가 나도 Class에 점 찍고 써야한다. static을 쓴 것은 Class에 종속적이게 됨. static을 안 썼으면 계속 힙에 새로 생기니까 멤버 변수를 인스턴스 수로 써도 공유해서 못 쓰는데 static을 붙이면 공유해서 쓸 수 있음. static 멤버가 아니면 무조건 instance 멤버임. static 멤버를 쓰듯이 static 메서드도 쓸 수 있는데, static 메서드의 내부에서는 instance의 멤버 변수는 사용할 수 없고 static 멤버 변수만 쓸 수 있음 정적 생성자(static constructor == cctor) --> 맨 처음에 단 한번만 생성 됨(메인보다 먼저 실행), 이것도 접근 제한자 붙이면 오류가 납니다. static 변수를 초기화 할 때 사용 네임스페이스를 배워봅시다 FQDN(Fully Qualified Domain Name) ex> System.console 이런 것 처럼 속해있는 곳을 전부 나열해주는 것을 FQDN임(C#은) 접근 제한자 - 클래스에 있는 멤버들을 누구에게 보여줄 것인지를 정하는 녀석. public(누구나), private(자기 자신만), protected(자기 자신 + 자기 자식), internal(동일 어셈블리), internal protected(동일 어셈블리 + 자기 자신 + 자기 자식) internal protected 이면 internal 또는 protected 입니다 ~~필기하지 않겠어 위키 코드가 올라오겠지~~, getter setter가 좀 독특하게 쓸 수 있음 싱기방기함 문맥 예약어 - 특정 문맥에서만 예약어로 변신 readonly(static이 됨), const(static이 될 수 없음) 상수를 쓰려면 무조건 기본 자료형만 가능, 대신 class는 readonly는 가능하다 상수는 생성자 안에서 초기화 할 수 없다 const는 define과 비슷한 개념 메서드 오버로딩 가능합니다. 시그니쳐로 구분합니다.(C언어에서는 함수 이름으로만 판단하는데 여기서는 아닙니다) 연산자 오버로딩 가능합니다. 쓰는 법 접근 제한자 static Class명 operator +(Class명 변수1, Class명 변수2) // <, > true, false 같은 것은 하나를 만들면 다른 하나도 반드시 만들어야 함. 중첩 클래스 가능합니다. ==== 4. 클래스와 객체지향 Part.#2 ==== 상속 부모 클래스( == 상위 클래스, 슈퍼 클래스)(영어로는 parent, base, super class) 자식 클래스( == 파생 클래스, 서브 클래스) 상속하는 방법 - :(콜론)을 써서 C++처럼 하는데 다중상속은 안됩니다. 밴다이어그램 그려서 하는데 잘 생각해보세요 as ==> safe casting (캐스팅이 실패하면 null이 된다) as는 참조형 변수에만 사용 가능(int 같은 것에 쓰면 터진다) is는 마찬가지로 형변환 체크, 대신에 return type이 bool === 그 외 === * 건의 사항으로 인해 변경된 위키 작성 방식에 관한 공지 == 덧글 == -------------------------------- [CS]