C# language 5

32
C# LANGUAGE - 5 GROW Common Study
  • Upload

    -
  • Category

    Software

  • view

    60
  • download

    0

Transcript of C# language 5

C# LANGUAGE - 5GROW Common Study

CONTENTS Object Custom Data-type

Class Structure Enum Interface

Object-Orient Inheritance

Multiple Inheritance Up-casting, Down-casting

OBJECTGROW Common Study

OBJECT 필드 , 메서드 , 프로퍼티 중 하나 이상을 포함하는 데이터

필드 / 프로퍼티 : 객체의 특징 메서드 : 객체가 할 수 있는 행동

C# 의 모든 자료는 객체이다 숫자 , 문자도 객체이다 Java 와 마찬가지로 객체가 아닌 자료가 없다

객체는 class, struct, enum 등을 이용해 틀을 잡을 수 있다 틀을 이용해 객체를 만드는 행위를 Instancing, Activation 등으로 말한다

우리말로는 객체화 , 인스턴스화 등으로 말한다

CLASSGROW Game Team

CLASS 객체를 만들기 위해 자료를 구성하는 틀

클래스는 필드 , 메서드 , 프로퍼티 , 이벤트를 가질 수 있다 필드 : 클래스 단위로 사용하는 변수 ( 멤버 변수 ) 메서드 : 클래스 단위로 사용하는 함수 ( 멤버 함수 ) 프로퍼티 : 클래스 단위로 사용하는 필드형 메서드 이벤트 : C 에서의 함수포인터 변수와 비슷한 기능을 하는 필드

객체 지향 프로그래밍 언어가 가지고 있어야 하는 필수 요소 없으면 객체를 만들기 어렵다 없이도 객체를 만드는 언어는 있다

Lua, Javascript, … 하지만 객체가 반쪽 짜리

CLASS

접근제한자 어디까지 접근 가능한가를 지정할 수 있는 키워드접근제한자 설명public 모든 곳에서 접근 가능protected 자식 클래스에서만 접근 가능private 자기 자신만 접근 가능internal 한 프로그램 내에서만 접근 가능

CLASS 객체화

다음과 같이 객체화를 수행한다

접근 다음과 같이 접근 연산자 ( 온점 , .) 를 이용해 객체 내의 자료

( 필드 , 메서드 , 프로퍼티 ) 에 접근한다

STRUCTUREGROW Common Study

STRUCTURE 구조체

class 와 큰 차이가 없다 메모리 구조상의 차이가 존재 매개변수가 없는 생성자를 만들 수 없다

매개변수가 없는 생성자는 무조건 public 으로 자동 생성된다 생성자는 반드시 필드를 모두 초기화해주어야 한다 구조체는 Value 방식으로 전달된다

클래스는 Reference 방식으로 전달

STRUCTURE 클래스와 구조체의 메모리상 차이

STRUCTURE 구조체 특성 지정하기

어떤 Attribute 를 지정하냐에 따라 구조체의 형태를 지정한다 StructLayout Attribute 를 지정한다

LayoutKind.Sequencial C 와 같은 형태로 순차적으로 필드의 위치가 지정된다

LayoutKind.Explicit 필드의 위치를 FieldOffset 특성을 이용해 개발자가 직접적으로 지정해주어야 한다

자주 사용되지는 않지만 어쩔 수 없이 사용하는 경우가 있다 Native 연동 시 사용 필드 위치를 비트 단위로 지정해주어야 할 때 사용

ENUMGROW Common Study

ENUM 상수를 한 번에 여러 개 정의 가능한 사용자 정의 자료형

거의 대부분의 C 계열 언어에는 이 Enum 기능이 있다 C# 의 Enum 은 C 의 Enum 과 가장 비슷하다

ENUM Enum 예제

INTERFACEGROW Common Study

INTERFACE 인터페이스

클래스를 비공개로 하고 메서드 및 프로퍼티만 공개하고 싶을 경우 사용 클래스를 비공개로 하면 상속 제한 및 객체화 제한이 쉽게 가능하다

또는 두 개 이상의 클래스를 동시에 상속받아야 하는 경우 기능 구현된 클래스가 필요하지 않은 경우 사용하기도 한다 예 ) 메모리 정리 메서드를 넣어야 하는 클래스에서 다른 클래스를 상속 받으면서 메모리 정리 메서드를 구현하는 인터페이스를 같이 상속

IDisposable 참고 (http://bit.ly/1m2cYds)

INTERFACE 특징

인터페이스가 가지는 모든 메서드 및 프로퍼티 , 이벤트 등은 public 구현한다

필드를 가질 수 없다 두 가지 이상의 interface 를 상속 받을 수 있다 인터페이스를 상속 받으면 해당 인터페이스의 모든 요소를 반드시 구현해야 한다 인터페이스는 인터페이스를 상속받을 수 있다

단 , 이 경우 구현하지는 않는다 ( 구현 불가능 )

INHERITANCEGROW Common Study

INHERITANCE 상속

어떤 클래스들이 공통적으로 가지는 기능들을 하나로 묶어 이를 가져다 사용하는 것을 말한다자동차

소형차 트럭 스포츠카

사람

학생 영업사원 개발자

몬스터

슬라임 스켈레톤 리자드맨

INHERITANCE 상속

클래스 및 객체를 객체 지향 프로그래밍의 꽃이라고 한다면 상속은 객체 지향 프로그래밍의 열매 상속을 잘 사용하는 사람은 프로그램 구조의 관리 효율을 높이고 개발 속도를 최소 40% 이상 향상시킬 수 있다

INHERITANCE 다중 상속

기본적으로 한 클래스 당 하나의 클래스만 상속받을 수 있다 인터페이스는 이 제한에 해당하지 않는다 이 원리를 이용하여 다중 상속을 구현한다

INHERITANCE 상향 캐스팅 , 하향 캐스팅

상향 캐스팅 상속한 클래스 (Child class) 를 상속되는 클래스 (Parent class) 로 변환 상향 캐스팅은 묵시적으로 자동으로 해준다

하향 캐스팅 상속되는 클래스 (Parent class) 를 상속한 클래스 (Child class) 로 변환 하향 캐스팅은 명시적으로 직접 변환해주어야 한다

INHERITANCE 상향 캐스팅 , 하향 캐스팅

상향 캐스팅 자식 클래스를 부모 클래스로 변환하는 것이므로 부모 클래스의 모든 기능을 사용할 수 있기 때문에 안전하다

하향 캐스팅 부모 클래스를 자식 클래스로 변환하는 것이므로 자식 클래스의 모든 기능이 담겨있지 않을 가능성이 있기 때문에 위험하다

C# 은 하향 캐스팅 실패 시 null 이 된다 자식 클래스가 부모 클래스로 상향 캐스팅되어 있을 때 다시 자식 클래스로 하향 캐스팅하는 것은 성공하지만 부모 클래스를 하향 캐스팅하거나 다른 자식 클래스가 부모 클래스로 상향 캐스팅되어 있을 때 자식 클래스로 하향 캐스팅하는 것은 실패한다

INHERITANCE 상향 캐스팅

부모 클래스

자식 클래스 1

자식 클래스 2

부모 클래스자식 클래스 1

자식 클래스 2

INHERITANCE 하향 캐스팅 ( 성공 )

부모 클래스

자식 클래스 1

자식 클래스 2

자식 클래스 1

부모 클래스

자식 클래스 1

상향

하향

자식 클래스 2

부모 클래스

자식 클래스 2

상향

하향

INHERITANCE 하향 캐스팅 ( 실패 )

부모 클래스

자식 클래스 1

자식 클래스 2

자식 클래스 1

부모 클래스

자식 클래스 2

상향

하향

부모 클래스

자식 클래스하향

INHERITANCE 상향 캐스팅 , 하향 캐스팅

INHERITANCE 상향 캐스팅 , 하향 캐스팅

런타임 오류는 이렇게 하면 없어진다

HOMEWORKGROW Common Study

HOMEWORK 아래와 같은 클래스를 상속을 이용하여 적절히 객체 지향 설계를 하시오

정답은 없음 뒷 슬라이드에 계속

HOMEWORK 계속