SlideShare a Scribd company logo
1 of 75
Download to read offline
C# 고급 문법 Part 1
OOPARTS C++ & C# STUDY
지난 시간에는…
✓ C#에서 콘솔에서 입력 받는 방법을 살펴보았어요.
✓ 예외 처리 하는 방법을 알아보았어요.
✓ 열거체(enum)에 대해 알아보았어요.
✓ 클래스의 구성 요소에 대해 알아보았어요.
✓ 구조체(struct)와 클래스의 차이점에 대해 알아보았어요.
오늘의 목표
접근 제한자에 대해 알아보아요.
프로퍼티에 대해 알아보아요.
클래스 상속을 알아보아요.
인터페이스에 대해 알아보아요.
static에 대해 알아보아요.
Access
Modifier
접근 제한자에 대해 알아보아요.
접근 제한자
✓ 접근을 제한하고 싶을 때 사용해요.
접근 제한자
✓ 접근을 제한하고 싶을 때 사용해요.
✓ 왜?
접근 제한자
✓ 접근을 제한하고 싶을 때 사용해요.
✓ 왜?
- 외부의 잘못된 사용으로 인해 객체가 손상되지 않기 위해서
접근 제한자
접근 제한자 설명
public 모든 외부에서 접근할 수 있어요.
private 동일한 클래스/구조체 안에서만 접근할 수 있어요.
protected 파생클래스에서 이 클래스 멤버에 접근할 수 있어요.
internal 같은 어셈블리에서만 접근할 수 있어요.
어셈블리 A
접근 제한자 - public
A
Data1
Data2
…
DataN
B
어셈블리 A
접근 제한자 - private
A
Data1
Data2
…
DataN
B
어셈블리 A
접근 제한자 - protected
A
Data1
Data2
…
DataN
B
어셈블리 A
접근 제한자 - protected
Parent
Data1
Data2
…
DataN
Child
상속
어셈블리 A
접근 제한자 - internal
A
Data1
Data2
…
DataN
B
어셈블리 B
C
어셈블리 A
접근 제한자 - internal
A
Data1
Data2
…
DataN
B
어셈블리 B
C
접근 제한자에 대해 알아보았어요.
이제 CSharp_3_yeshi_1.cs 파일을 같이 살펴봐요!
Property Property 사용법을 알아보아요.
방금 전 살펴봤던 예시 1번 코드를 가져왔어요.
이제 우리가 하고 싶은 건 남은 콜라의 개수를 출력하는 거예요.
Get~ 메소드를 만들어서 할 수도 있어요.
그치만 이렇게 하면 코드가 이쁘지 않아요.
위 방식을 사용하면 위 슬라이드의 ???은 다음과 같이 채울 수 있을 거예요.
그래서 등장한 게 프로퍼티예요.
프로퍼티를 사용하면 위 슬라이드의 ???을 아래와 같이 채울 수 있어요.
프로퍼티 선언 방법 (1-1)
set으로 프로퍼티의 값을 바꿀
때의 동작을 정의할 수 있어요.
프로퍼티 선언 방법 (1-1)
get으로 프로퍼티의 값을 가져올
때의 동작을 정의할 수 있어요.
요렇게 프로퍼티 값을 바꿀 수
있어요. 이러면 위에서 정의한
set이 호출될 거예요.
요렇게 프로퍼티 값을 가져올 수
있어요. 이러면 위에서 정의한
get이 호출될 거예요.
프로퍼티 선언 방법 (1-2)
이런 식으로 set에선 꼭 값을
바꾸지 않아도 돼요.
프로퍼티 선언 방법 (2)
이렇게 아무 정의도 적어주지
않으면 C#에서 알아서 구현해줄
거예요.
이 경우에도 똑같은 방법으로 쓰면
돼요.
프로퍼티와 접근 제한자
이렇게 아무 정의도 적어주지
않으면 C#에서 알아서 구현해줄
거예요.
프로퍼티와 접근 제한자
set 접근자에 private을 붙이면
프로퍼티 수정을 클래스 외부에서
할 수 없도록 막을 수 있어요.
프로퍼티와 접근 제한자
클래스 내부에선 프로퍼티를
수정할 수 있어요.
프로퍼티와 접근 제한자
클래스 외부에선 프로퍼티를
수정하려 하면 VS에서 빨간 줄을
그어주는 걸 볼 수 있어요.
프로퍼티 선언 방법 (3)
이번엔 아예 set 접근자가 없어요.
이런 경우엔 해당 프로퍼티를 아예
수정할 수 없게 돼요.
프로퍼티 선언 방법 (3)
이젠 클래스 내부에서도 수정할 수
없는 걸 확인할 수 있어요.
프로퍼티 초기화
이런 식으로 자동구현 프로퍼티의
초기값을 줄 수도 있어요.
프로퍼티에 대해 알아보았어요.
코드를 열심히 살펴봤기 때문에 예시파일은 없어요!
Class
Inheritance
클래스 상속에 대해 살펴보아요.
클래스 상속
✓ 부모 클래스(Base Class)를 상속받아서 파생 클래스(Derived Class) 를 만들 수 있어요.
✓ 파생 클래스에선 부모 클래스의 public, protected 멤버를 쓸 수 있어요.
✓ 파생 클래스는 부모 클래스에게 물려 받는 멤버와 자신만의 고유 멤버를 가질 수 있어요.
✓ 한 개의 클래스만 상속받을 수 있어요.
파생 클래스의 이름 옆에 콜론(:)을
적고 부모 클래스 이름을 적으면
상속 돼요.
Name은 부모 클래스의 멤버라서
파생 클래스에서 별도의 선언 없이
바로 사용할 수 있어요.
파생 클래스 고유의 멤버도 가질
수 있어요.
Override
✓ 부모 클래스의 메소드를 재정의 할 수 있어요.
✓ 재정의를 허용하고 싶다면 부모 클래스에서 메소드를 선언할 때 virtual이나 abstract 키워
드를 붙여줘야 해요.
✓ 파생 클래스에선 override 키워드를 붙여줘야 해요.
virtual을 붙여주어 재정의 할 수
있음을 알려주어야 해요.
override를 붙여주어 부모 클래스의
메소드를 재정의 함을 의미해요
부모 클래스형 변수에 파생 클래스형
데이터를 넣어줄 수 있어요.
비록 anim이 Animal형 변수이지만,
호출되는 건 Chicken 클래스의 Speak
메소드예요.
추상 클래스
✓ class 키워드 앞에 abstract 키워드를 붙여 만들 수 있어요.
✓ 추상 클래스는 new 키워드를 이용해 인스턴스를 만들 수 없어요.
✓ 추상 클래스는 추상 메소드를 가질 수 있어요.
abstract 키워드를 붙여 추상
메소드를 만들 수 있어요.
추상 메소드는 본문을 정의할 수
없어요.
역시 마찬가지로 override
키워드를 붙여 파생 클래스에서
정의해줄 수 있어요.
this vs base
✓ this 키워드는 자기 자신을 가리켜요.
✓ base는 부모 클래스를 가리켜요.
base는 부모 클래스를 가리키기 때문에
부모 클래스의 Foo가 호출될 거예요.
this는 자기 자신을 가리키기 때문에 파생
클래스의 Foo가 호출될 거예요.
Object
✓ C#의 모든 클래스/구조체는 Object 클래스를 상속받아요.
✓ 굳이 Object를 상속한다고 표기하지 않아도. 자동으로 Object 클래스를 상속받아요.
✓ 모든 변수에 .ToString() 등 을 사용할 수 있는 이유는 Object 클래스를 모든 타입이 상속받
기 때문이에요.
✓ Object를 사용해야할 때 object 키워드를 이용할 수도 있어요.
캐스팅
✓ C#에서도 데이터 타입을 강제로 변환하는 캐스팅을 할 수 있어요.
✓ C와 비슷한 방식으로 하면 돼요.
C에서와 마찬가지 방식으로 캐스팅하면 돼요.
만약 캐스팅에 실패했다면 아래와 같이
예외를 내보내요.
as 연산자
✓ as 연산자는 인스턴스를 지정된 클래스 타입으로 변환해줘요. (캐스팅과 비슷해요)
✓ 만약 변환에 실패하면 null을 반환해요.
캐스팅 하지 않고 as를 이용한 예시예요.
foo가 Child 타입을 가지고 있지 않으니
false가 반환될 거예요.
is 연산자
✓ is 연산자는 인스턴스가 특정 클래스 타입이나 인터페이스를 갖고 있는지 확인해요.
foo가 Child 타입을 가지고 있지 않으니
false가 반환될 거예요.
Foo가 Parent 타입을 가지고 있지 않으니
true가 반환될 거예요.
클래스 상속에 대해 알아보았어요.
뒤에 인터페이스까지 보고 예시 파일을 볼게요!
Interface 인터페이스에 대해 살펴보아요.
인터페이스
✓ 클래스와 비슷하게 메서드, 속성, 이벤트, 프로퍼티 등을 가져요.
✓ 하지만 인터페이스에선 이들을 직접 구현하지 않고, 프로토타입만 가지고 있어요.
✓ 역시 상속의 대상이 될 수 있어요.
✓ 인터페이스를 상속받은 클래스는 인터페이스의 모든 멤버를 구현해야 해요.
✓ 클래스 상속과는 다르게 여러 인터페이스를 상속받을 수도 있어요.
인터페이스에선 접근 한정자를 붙이지 않아요.
재정의 하는 것이 아니기 때문에
override 키워드를 붙이지 않아요.
사용 자체는 클래스 상속받을 때와
크게 다르지 않아요.
열심히 달려오셨어요 :D
이제 CSharp_3_yeshi_2.cs 파일을 같이 살펴봐요!
Static
static 메소드에 대해 알아보아요.
static 클래스에 대해 알아보아요
Foo는 인스턴스 메소드예요.
따라서 Foo를 쓰고 싶다면 인스턴스를
생성해야 해요.
Bar은 스태틱 메소드예요.
따라서 Bar를 쓰고 싶을 때 인스턴스를 굳이
생성하지 않아도 돼요.
스태틱 메소드에 접근할 땐
<클래스 이름>.<메소드 이름>으로 하면 돼요.
과제
▪이번 시간에 알아본 내용으로 충분히 구현할 수 있는 과제도 있어요.
문제 하나당 한 소스파일을 작성해주시면 돼요.
각 소스파일의 이름은 과제1, 과제2, 과제3이나 문제1, 문제2, 문제3 등 자유롭게 적어 주시
면 돼요.
▪과제는 의무적인 건 아니에요!
하셔도 되고 안 하셔도 돼요. 자유롭게, 부담 안 가지셔도 돼요!

More Related Content

What's hot

Effective c++ 3
Effective c++ 3Effective c++ 3
Effective c++ 3현찬 양
 
7.읽기 쉽게 흐름제어 만들기
7.읽기 쉽게 흐름제어 만들기7.읽기 쉽게 흐름제어 만들기
7.읽기 쉽게 흐름제어 만들기GeniusYG
 
PSR - Code Convention
PSR - Code ConventionPSR - Code Convention
PSR - Code Conventionjhyeon1010
 
비개발자를 위한 Javascript 알아가기 #6
비개발자를 위한 Javascript 알아가기 #6비개발자를 위한 Javascript 알아가기 #6
비개발자를 위한 Javascript 알아가기 #6민태 김
 
[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿해강
 
Clean code(03)
Clean code(03)Clean code(03)
Clean code(03)규열 김
 
모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디quxn6
 
Effective c++ 1
Effective c++ 1Effective c++ 1
Effective c++ 1현찬 양
 
Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Nam Hyeonuk
 
More effective c++ 1
More effective c++ 1More effective c++ 1
More effective c++ 1현찬 양
 
More effective c++ 항목30부터
More effective c++ 항목30부터More effective c++ 항목30부터
More effective c++ 항목30부터Dong Chan Shin
 
Effective c++ 2
Effective c++ 2Effective c++ 2
Effective c++ 2현찬 양
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinDong Chan Shin
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4현찬 양
 
More effective c++ chapter1 2_dcshin
More effective c++ chapter1 2_dcshinMore effective c++ chapter1 2_dcshin
More effective c++ chapter1 2_dcshinDong Chan Shin
 
Scala block expression
Scala block expressionScala block expression
Scala block expressionYong Joon Moon
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)익성 조
 

What's hot (20)

01. basic types
01. basic types01. basic types
01. basic types
 
Effective c++ 3
Effective c++ 3Effective c++ 3
Effective c++ 3
 
7.읽기 쉽게 흐름제어 만들기
7.읽기 쉽게 흐름제어 만들기7.읽기 쉽게 흐름제어 만들기
7.읽기 쉽게 흐름제어 만들기
 
PSR - Code Convention
PSR - Code ConventionPSR - Code Convention
PSR - Code Convention
 
비개발자를 위한 Javascript 알아가기 #6
비개발자를 위한 Javascript 알아가기 #6비개발자를 위한 Javascript 알아가기 #6
비개발자를 위한 Javascript 알아가기 #6
 
Scala type args
Scala type argsScala type args
Scala type args
 
Scala match pattern
Scala match patternScala match pattern
Scala match pattern
 
[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿
 
Clean code(03)
Clean code(03)Clean code(03)
Clean code(03)
 
모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디모어 이펙티브 c++ 1,2장 스터디
모어 이펙티브 c++ 1,2장 스터디
 
Effective c++ 1
Effective c++ 1Effective c++ 1
Effective c++ 1
 
Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약Effective c++ chapter 1,2 요약
Effective c++ chapter 1,2 요약
 
More effective c++ 1
More effective c++ 1More effective c++ 1
More effective c++ 1
 
More effective c++ 항목30부터
More effective c++ 항목30부터More effective c++ 항목30부터
More effective c++ 항목30부터
 
Effective c++ 2
Effective c++ 2Effective c++ 2
Effective c++ 2
 
Effective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshinEffective c++ chapter1 2_dcshin
Effective c++ chapter1 2_dcshin
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4
 
More effective c++ chapter1 2_dcshin
More effective c++ chapter1 2_dcshinMore effective c++ chapter1 2_dcshin
More effective c++ chapter1 2_dcshin
 
Scala block expression
Scala block expressionScala block expression
Scala block expression
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)
 

Similar to C# 고급 문법 part 1

Scala self type inheritance
Scala self type inheritanceScala self type inheritance
Scala self type inheritanceYong Joon Moon
 
스칼라 클래스 이해하기 _Scala class understanding
스칼라 클래스 이해하기 _Scala class understanding스칼라 클래스 이해하기 _Scala class understanding
스칼라 클래스 이해하기 _Scala class understandingYong Joon Moon
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java유리 하
 
10 swift 열거형구조체클래스
10 swift 열거형구조체클래스10 swift 열거형구조체클래스
10 swift 열거형구조체클래스Changwon National University
 
파이썬 둘째날
파이썬 둘째날파이썬 둘째날
파이썬 둘째날명준 김
 
Use JavaScript more strictly (feat. TypeScript, flow)
Use JavaScript more strictly (feat. TypeScript, flow)Use JavaScript more strictly (feat. TypeScript, flow)
Use JavaScript more strictly (feat. TypeScript, flow)Mark Lee
 
C++ struct copy
C++ struct copyC++ struct copy
C++ struct copy송미 이
 
Template at c++
Template at c++Template at c++
Template at c++Lusain Kim
 
객체지향 프로그래밍 기본
객체지향 프로그래밍 기본객체지향 프로그래밍 기본
객체지향 프로그래밍 기본용호 최
 
[자바카페] 자바 객체지향 프로그래밍 (2017)
[자바카페] 자바 객체지향 프로그래밍 (2017)[자바카페] 자바 객체지향 프로그래밍 (2017)
[자바카페] 자바 객체지향 프로그래밍 (2017)용호 최
 
[C++ lab] 3. c++ 프로그래밍
[C++ lab] 3. c++ 프로그래밍[C++ lab] 3. c++ 프로그래밍
[C++ lab] 3. c++ 프로그래밍MinGeun Park
 
게임프로그래밍입문 7
게임프로그래밍입문 7게임프로그래밍입문 7
게임프로그래밍입문 7Yeonah Ki
 
Holub on-patterns-2-1
Holub on-patterns-2-1Holub on-patterns-2-1
Holub on-patterns-2-1정환 임
 
HolubOnPatterns/chapter2_1
HolubOnPatterns/chapter2_1HolubOnPatterns/chapter2_1
HolubOnPatterns/chapter2_1정환 임
 
02. class in typescript
02. class in typescript02. class in typescript
02. class in typescriptHan JaeYeab
 
Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)Hyun Sung Yoon
 
Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)Hyun Sung Yoon
 

Similar to C# 고급 문법 part 1 (20)

Scala self type inheritance
Scala self type inheritanceScala self type inheritance
Scala self type inheritance
 
스칼라 클래스 이해하기 _Scala class understanding
스칼라 클래스 이해하기 _Scala class understanding스칼라 클래스 이해하기 _Scala class understanding
스칼라 클래스 이해하기 _Scala class understanding
 
[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java[HaU] 신입 기술 면접 준비 java
[HaU] 신입 기술 면접 준비 java
 
10 swift 열거형구조체클래스
10 swift 열거형구조체클래스10 swift 열거형구조체클래스
10 swift 열거형구조체클래스
 
상속과 구현
상속과 구현상속과 구현
상속과 구현
 
파이썬 둘째날
파이썬 둘째날파이썬 둘째날
파이썬 둘째날
 
Use JavaScript more strictly (feat. TypeScript, flow)
Use JavaScript more strictly (feat. TypeScript, flow)Use JavaScript more strictly (feat. TypeScript, flow)
Use JavaScript more strictly (feat. TypeScript, flow)
 
C++ struct copy
C++ struct copyC++ struct copy
C++ struct copy
 
Template at c++
Template at c++Template at c++
Template at c++
 
객체지향 프로그래밍 기본
객체지향 프로그래밍 기본객체지향 프로그래밍 기본
객체지향 프로그래밍 기본
 
[자바카페] 자바 객체지향 프로그래밍 (2017)
[자바카페] 자바 객체지향 프로그래밍 (2017)[자바카페] 자바 객체지향 프로그래밍 (2017)
[자바카페] 자바 객체지향 프로그래밍 (2017)
 
[C++ lab] 3. c++ 프로그래밍
[C++ lab] 3. c++ 프로그래밍[C++ lab] 3. c++ 프로그래밍
[C++ lab] 3. c++ 프로그래밍
 
[ES6] 6. Class
[ES6] 6. Class[ES6] 6. Class
[ES6] 6. Class
 
게임프로그래밍입문 7
게임프로그래밍입문 7게임프로그래밍입문 7
게임프로그래밍입문 7
 
Holub on-patterns-2-1
Holub on-patterns-2-1Holub on-patterns-2-1
Holub on-patterns-2-1
 
HolubOnPatterns/chapter2_1
HolubOnPatterns/chapter2_1HolubOnPatterns/chapter2_1
HolubOnPatterns/chapter2_1
 
02. class in typescript
02. class in typescript02. class in typescript
02. class in typescript
 
Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)
 
Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)Chapter8 상속과다형성(윤현성)
Chapter8 상속과다형성(윤현성)
 
EC 789
EC 789EC 789
EC 789
 

C# 고급 문법 part 1