c# language 5
TRANSCRIPT
CONTENTS Object Custom Data-type
Class Structure Enum Interface
Object-Orient Inheritance
Multiple Inheritance Up-casting, Down-casting
OBJECT 필드 , 메서드 , 프로퍼티 중 하나 이상을 포함하는 데이터
필드 / 프로퍼티 : 객체의 특징 메서드 : 객체가 할 수 있는 행동
C# 의 모든 자료는 객체이다 숫자 , 문자도 객체이다 Java 와 마찬가지로 객체가 아닌 자료가 없다
객체는 class, struct, enum 등을 이용해 틀을 잡을 수 있다 틀을 이용해 객체를 만드는 행위를 Instancing, Activation 등으로 말한다
우리말로는 객체화 , 인스턴스화 등으로 말한다
CLASS 객체를 만들기 위해 자료를 구성하는 틀
클래스는 필드 , 메서드 , 프로퍼티 , 이벤트를 가질 수 있다 필드 : 클래스 단위로 사용하는 변수 ( 멤버 변수 ) 메서드 : 클래스 단위로 사용하는 함수 ( 멤버 함수 ) 프로퍼티 : 클래스 단위로 사용하는 필드형 메서드 이벤트 : C 에서의 함수포인터 변수와 비슷한 기능을 하는 필드
객체 지향 프로그래밍 언어가 가지고 있어야 하는 필수 요소 없으면 객체를 만들기 어렵다 없이도 객체를 만드는 언어는 있다
Lua, Javascript, … 하지만 객체가 반쪽 짜리
CLASS
접근제한자 어디까지 접근 가능한가를 지정할 수 있는 키워드접근제한자 설명public 모든 곳에서 접근 가능protected 자식 클래스에서만 접근 가능private 자기 자신만 접근 가능internal 한 프로그램 내에서만 접근 가능
STRUCTURE 구조체
class 와 큰 차이가 없다 메모리 구조상의 차이가 존재 매개변수가 없는 생성자를 만들 수 없다
매개변수가 없는 생성자는 무조건 public 으로 자동 생성된다 생성자는 반드시 필드를 모두 초기화해주어야 한다 구조체는 Value 방식으로 전달된다
클래스는 Reference 방식으로 전달
STRUCTURE 구조체 특성 지정하기
어떤 Attribute 를 지정하냐에 따라 구조체의 형태를 지정한다 StructLayout Attribute 를 지정한다
LayoutKind.Sequencial C 와 같은 형태로 순차적으로 필드의 위치가 지정된다
LayoutKind.Explicit 필드의 위치를 FieldOffset 특성을 이용해 개발자가 직접적으로 지정해주어야 한다
자주 사용되지는 않지만 어쩔 수 없이 사용하는 경우가 있다 Native 연동 시 사용 필드 위치를 비트 단위로 지정해주어야 할 때 사용
INTERFACE 인터페이스
클래스를 비공개로 하고 메서드 및 프로퍼티만 공개하고 싶을 경우 사용 클래스를 비공개로 하면 상속 제한 및 객체화 제한이 쉽게 가능하다
또는 두 개 이상의 클래스를 동시에 상속받아야 하는 경우 기능 구현된 클래스가 필요하지 않은 경우 사용하기도 한다 예 ) 메모리 정리 메서드를 넣어야 하는 클래스에서 다른 클래스를 상속 받으면서 메모리 정리 메서드를 구현하는 인터페이스를 같이 상속
IDisposable 참고 (http://bit.ly/1m2cYds)
INTERFACE 특징
인터페이스가 가지는 모든 메서드 및 프로퍼티 , 이벤트 등은 public 구현한다
필드를 가질 수 없다 두 가지 이상의 interface 를 상속 받을 수 있다 인터페이스를 상속 받으면 해당 인터페이스의 모든 요소를 반드시 구현해야 한다 인터페이스는 인터페이스를 상속받을 수 있다
단 , 이 경우 구현하지는 않는다 ( 구현 불가능 )
INHERITANCE 상속
어떤 클래스들이 공통적으로 가지는 기능들을 하나로 묶어 이를 가져다 사용하는 것을 말한다자동차
소형차 트럭 스포츠카
사람
학생 영업사원 개발자
몬스터
슬라임 스켈레톤 리자드맨
INHERITANCE 상속
클래스 및 객체를 객체 지향 프로그래밍의 꽃이라고 한다면 상속은 객체 지향 프로그래밍의 열매 상속을 잘 사용하는 사람은 프로그램 구조의 관리 효율을 높이고 개발 속도를 최소 40% 이상 향상시킬 수 있다
INHERITANCE 상향 캐스팅 , 하향 캐스팅
상향 캐스팅 상속한 클래스 (Child class) 를 상속되는 클래스 (Parent class) 로 변환 상향 캐스팅은 묵시적으로 자동으로 해준다
하향 캐스팅 상속되는 클래스 (Parent class) 를 상속한 클래스 (Child class) 로 변환 하향 캐스팅은 명시적으로 직접 변환해주어야 한다
INHERITANCE 상향 캐스팅 , 하향 캐스팅
상향 캐스팅 자식 클래스를 부모 클래스로 변환하는 것이므로 부모 클래스의 모든 기능을 사용할 수 있기 때문에 안전하다
하향 캐스팅 부모 클래스를 자식 클래스로 변환하는 것이므로 자식 클래스의 모든 기능이 담겨있지 않을 가능성이 있기 때문에 위험하다
C# 은 하향 캐스팅 실패 시 null 이 된다 자식 클래스가 부모 클래스로 상향 캐스팅되어 있을 때 다시 자식 클래스로 하향 캐스팅하는 것은 성공하지만 부모 클래스를 하향 캐스팅하거나 다른 자식 클래스가 부모 클래스로 상향 캐스팅되어 있을 때 자식 클래스로 하향 캐스팅하는 것은 실패한다
INHERITANCE 하향 캐스팅 ( 성공 )
부모 클래스
자식 클래스 1
자식 클래스 2
자식 클래스 1
부모 클래스
자식 클래스 1
상향
하향
자식 클래스 2
부모 클래스
자식 클래스 2
상향
하향