SlideShare a Scribd company logo
1 of 37
C# 개요 및 소개
김주영 / 유니티 스터디 / 2024-04-19
- Hello World
- 주요 키워드
- .NET 아키텍처
- C# 타입 시스템(CTS) 개요
Hello World
주요 키워드
- 객체 지향 언어, 컴포넌트 지향 언어
- 가비지 컬렉터
- Nullable
- 언어 통합 쿼리(LINQ) 구문
- 통합 시스템
- 참조 타입 / 벨류 타입
- 제네릭 메서드와 제네릭 타입
- 컬렉션 클래스
.NET 아키텍처
- MS 에서 JAVA 의 대안으로 C#과 함께 내놓은 플랫폼
- C# 소스 → IL(중간 언어)로 번역 (C++의 경우 소스 → 기계어로 직접 번역)
- CLR(공용 언어 런타임) 위에서 실행. IL 코드를 기계어로 컴파일한 뒤 실행 (C++는 운
영체제 위에 직접 실행)
- C#에서 생성된 IL 코드는 다른 .NET 언어와 호환 가능(F#, 비주얼 베이직 등)
- 다른 운영체제에서도 돌아감
결론: C# 언어를 쓴다는건 곧 .NET 아키텍처를 사용하는 것
C# 타입 시스템 특1) 상속으로 이루어져 있다.
C#의 모든 타입은 object 클래스
를 직간접적으로 상속 받고 있다.
따라서 object는 모든 타입의 부
모 클래스이다.
그래서 이런 짓(박싱/언박싱)을
할 수 있다.
C# 타입 시스템 특2) 타입이 두 가지로 나뉜다.
벨류 타입: 해당 데이터 직접 포함(스택에 할당)
기존 객체를 새 변수에 새 변수에 할당하면 별도
의 데이터가 복사된다.
각 복사본의 변경 사항은 다른 복사본에 영향을
주지 않는다.
- 기본 제공 타입(정수, 유니코드 문자, 부동
소수점, 불리언…)
- 열거체
- 구조체*
- Nullable
- 튜플
참조 타입: 데이터에 대한 참조 포함(힙 할당)
새기존 객체를 새 변수에 할당하면 동일한 데이
터를 참조하게 된다.
변수의 변경이 다른 변수에도 반영된다.
new 로 생성하고 가비지 컬렉터가 알아서 메모
리 할당 해제 해준다.
- 배열
- 스트링
- 클래스
- 인터페이스
- 델리게이트
C# 타입과 맴버
- 클래스
- 구조체
- 인터페이스
- 열거형
- nullable
- 튜플
클래스
- 클래스 = 필드 + 매서드 + 기타 맴버함수
- 상속, 다형성, 파생 클래스, 특수화 기능이 있다.
- new 연산자로 생성하고 가비지 지컬렉터가 알아서 메모리 해제 해준다.
- 새 클래스 클래스 선언 형식:
[ 한정자 ] [ 클래스 이름 ] [ 부모 클래스 이름 ]
{
// 본문 …
}
클래스 - 타입 매개변수
- 제네릭 클래스(C++ 의 템플릿 클래스와 매우 유사하다)는 타입 매개변수를 정의한다.
- 제네릭 클래스는 타입 매개변수를 사용한 클래스, 구조체, 인터페이스, 델리게이트
- <> 로 감싼 타입이 타입 매개변수 목록이다
클래스 - 부모 클래스
- 생략하면 object 클래스를 직방 상속
- C++ 처럼 암시적 변환 존재
구조체
- 크기가 작은 단순 데이터 저장용으로 쓴다.
- 부모 타입으로 못쓴다. (C++ 과 다르게)
- System.ValueType 에서 암시적으로 상속받는다.
즉, 동적 할당 생성 못함!
인터페이스
- 클래스나 구조체가 구현할 것을 정의한다.
- 인터페이스 내 맴버는 선언만 하고 구현하지 않는다.
- 인터페이스는 다중 상속할 수 있다.
- 암시적 변환이 가능히다.
열거형
- 상수 값 세트를 정의한다.
- 예제의 [Flag] 어트리뷰트는 비트 플래그로 쓸 수 있다는 뜻임
Nullable
- 기본 제공 타입(정수, 유니코드 문자, 부동 소수점, 불리언…)을 null 타입으로 만들어버리기
- 타입이 벨류 타입이라면 System.Nullable<T> 를 상속받는다.
- nullable 여부는 메타데이터로 저장서 컴파일러와 라이브러리가 읽는다.
튜플
- 여러 데이터를 간단히 그룹화 하는 자료 구조이다.
C# 프로그램 구성 요소
- 맴버
- 필드
- 매서드
- 함수 맴버
- 식(생략)
- 문(생략)
맴버
맴버의 종류
- 상수
- 필드: 클래스와 연결된 변수
- 매서드: 클래스가 수행할 수 있는 작업
- 프러퍼티: 읽기/쓰기 함수
- 인덱서: 인덱싱 관련 함수
- 이벤트: 클래스에서 생성할 수 있는 알림
- 연산자
- 생성자
- 소멸자
- 타입
접근 제한 수준
- public
- private
- protected
- internal
- protected internal
- private protected
필드
- 클래스의 인스턴스와 연결된 변수이다.
- static 아니면 인스턴스가 각각 별도의 복사본을 가지고 있다.
- readonly 한정자를 선언하면 읽기 전용 필드가 된다.
메서드
C# 메서드 시그니처는 다음과 같다.
- 메서드 이름
- 한정자, 타입, 매개변수 수
- 제네릭 타입 파라미터 수 ***
※ 리턴 타입은 메서드 시그니처가 아니다.
메서드 시그니처를 유지하는 한 오버로드 가능하다.
메서드 - 매개 변수
메서드의 매개변수는 네 종류가 있다.
- 벨류 파라미터: 그냥 입력 값을 복사전달한다.
- 참조 파라미터: 인수와 동일한 메모리 주소 전달하고, 값이 꼭 있어야함.
- 출력 파라미터: 인수와 동일한 메모리 주소 전달하고, 값이 없어도 된다.
- 파라미터 배열: 여러개의 인수를 전달한다.
메서드 - 참조 매개 변수
- 인수는 명확한 값을 가진 변수야 한다.
- 메서드를 실행하는 동안 인수와 동일한 주소를 나타낸다.
- ref 한정사를 사용한다.
메서드 - 출력 매개 변수
- 인수는 명확한 값을 가질 필요 없다.
- 참조 매개변수와 비슷하다.
- out 한정사를 사용한다.
- 파라미터 중 맨 뒤에 있어야 함.
- 배열 타입은 1차원 배열이야 함
- 배열 뿐만 아니라 단일 인수를 넣어도 알잘딱
- params 한정사를 사용한다.
메서드 - 매개 변수 배열
함수 맴버
특별한 매서드 맴버이다.
- 생성자
- 프러퍼티
- 인덱서
- 이벤트
- 연산자
- 소멸자
함수 맴버 - 생성자
- 인스턴스 생성자, 스테틱 생성자가 있다.
- 인스턴스 생성자: 클래스 인스턴스 초기화
- 스테틱 생성자: 클래스 자체를 초기화. static 한정사 사용
- 오버로드할수 있고 매개변수도 가질 수 있다.
- 명시하지 않으면 암시적으로 빈 생성자가 만들어진다.
- 상속되지 않는다.
함수 맴버 - 프러퍼티
- 필드의 확장 버전. 필드처럼 타입을 지정하고 접근하나, 필드처럼 메모리 위치
를 명시하지 않는다.
- ; 로 안 끝나고 {} 안에 get 접근저와 set 접근자 선언을 한다.
- get는 해당 프로퍼티 타입을 반환하는 메서드, set는 value 를 매개변수로 받는 메서드
- 잘 설정하면 읽기/쓰기 설정할 수 있다.
함수 맴버 - 프러퍼티
함수 맴버 - 인덱서
- 배열처럼 인덱싱 하는 것 설정하는 맴버이다.
- this 와 [] 사이의 매개변수를 넣어서 만든다.
- 읽기/쓰기 설정할 수 있다.
이벤트
- 클래스의 다른 맴버 함수에서 호출된다.
- event 키워드를 사용한다.
사용법
1. 이벤트 정의
2. 이벤트 발생 메서드 정의
3. 이벤트 핸들러 등록
이벤트
주목할만한 C# 주요 기능
- 배열, 컬렉션, LINQ
- 델리게이트와 람다식
- 어트리뷰트
배열, 컬렉션, LINQ
- 배열은고정 크기의 데이터
- 1차원 배열, 다차원 배열, 가변 배열
- 가변적 크기의 자료구조를 쓰려면 컬렉션
- List<T>, Dictionary<TKey, TValue>, HashSet<T>, Queue<T>, Stack<T>, LinkedList<T>
- C++ STL 의 이터레이터 같은 것(yield 키워드)도 지원
- 컬렉션은 LINQ 쿼리와 함꼐 사용할 수 있다.
- 컬렉션은 C++에서 STL 같은 것, LINQ쿼리는 SQL쿼리 같은 것
배열, 컬렉션, LINQ - 배열
델리게이트와 람다 식
- 특정 메서드에 대한 참조 타입이다.
- 매서드를 하나의 객체처럼 취급하게 만든다.
- 함수 포인터와 비슷하나 보다 OOP 적이고 안전하다고 한다.
- 정의 없이 함수만 선언한 것 같은 모습
어트리뷰트
- 메타데이터를 추가하는데 사용한다.
- [] 속성 이름과 매개변수를 넣는다.
종류
- [Obsolete]: 더는 사용되지 않는다는 뜻. 해당 코드를 쓰면 컴파일러 경고
- [DllImportable]: 외부 DLL 에서 정적 메서드를 가져올 수 있음
- [Serializable]: 클래스나 구조체가 직렬화 할 수 있음
- [Conditional]: 메서드가 조건부로 호출됨
- [Flag]: 열거형을 비트플래그로 사용함
어트리뷰트

More Related Content

Similar to C# 개요 및 소개 [ 유니티 및 C# 스터디 / 2024-04-19 ]

Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4현찬 양
 
[세미나] 20160819 Java 프로그래머를 위한 Scala 튜토리얼
[세미나] 20160819 Java 프로그래머를 위한 Scala 튜토리얼[세미나] 20160819 Java 프로그래머를 위한 Scala 튜토리얼
[세미나] 20160819 Java 프로그래머를 위한 Scala 튜토리얼Sanghoon Yoon
 
발표자료 11장
발표자료 11장발표자료 11장
발표자료 11장Juhui Park
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)익성 조
 
[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿해강
 
파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기 파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기 Yong Joon Moon
 
Data Structure 4
Data Structure 4Data Structure 4
Data Structure 4yonsei
 
PySpark 배우기 Ch 06. ML 패키지 소개하기
PySpark 배우기 Ch 06. ML 패키지 소개하기PySpark 배우기 Ch 06. ML 패키지 소개하기
PySpark 배우기 Ch 06. ML 패키지 소개하기찬희 이
 
2. lambda expression
2. lambda expression2. lambda expression
2. lambda expression흥래 김
 
[스프링 스터디 1일차] 템플릿
[스프링 스터디 1일차] 템플릿[스프링 스터디 1일차] 템플릿
[스프링 스터디 1일차] 템플릿AnselmKim
 
Programming skills 1부
Programming skills 1부Programming skills 1부
Programming skills 1부JiHyung Lee
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304Yong Joon Moon
 
Windows via c++ chapter6
Windows via c++   chapter6Windows via c++   chapter6
Windows via c++ chapter6Shin heemin
 
자바로 배우는 자료구조
자바로 배우는 자료구조자바로 배우는 자료구조
자바로 배우는 자료구조중선 곽
 

Similar to C# 개요 및 소개 [ 유니티 및 C# 스터디 / 2024-04-19 ] (20)

9 swift 클로저1
9 swift 클로저19 swift 클로저1
9 swift 클로저1
 
Effective c++ 4
Effective c++ 4Effective c++ 4
Effective c++ 4
 
[세미나] 20160819 Java 프로그래머를 위한 Scala 튜토리얼
[세미나] 20160819 Java 프로그래머를 위한 Scala 튜토리얼[세미나] 20160819 Java 프로그래머를 위한 Scala 튜토리얼
[세미나] 20160819 Java 프로그래머를 위한 Scala 튜토리얼
 
발표자료 11장
발표자료 11장발표자료 11장
발표자료 11장
 
Java(1/4)
Java(1/4)Java(1/4)
Java(1/4)
 
이펙티브 C++ (7~9)
이펙티브 C++ (7~9)이펙티브 C++ (7~9)
이펙티브 C++ (7~9)
 
[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿[아꿈사] The C++ Programming Language 13장 템플릿
[아꿈사] The C++ Programming Language 13장 템플릿
 
파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기 파이썬 namespace Binding 이해하기
파이썬 namespace Binding 이해하기
 
Data Structure 4
Data Structure 4Data Structure 4
Data Structure 4
 
PySpark 배우기 Ch 06. ML 패키지 소개하기
PySpark 배우기 Ch 06. ML 패키지 소개하기PySpark 배우기 Ch 06. ML 패키지 소개하기
PySpark 배우기 Ch 06. ML 패키지 소개하기
 
Java script
Java scriptJava script
Java script
 
2. lambda expression
2. lambda expression2. lambda expression
2. lambda expression
 
[스프링 스터디 1일차] 템플릿
[스프링 스터디 1일차] 템플릿[스프링 스터디 1일차] 템플릿
[스프링 스터디 1일차] 템플릿
 
Programming skills 1부
Programming skills 1부Programming skills 1부
Programming skills 1부
 
파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304파이썬+주요+용어+정리 20160304
파이썬+주요+용어+정리 20160304
 
Windows via c++ chapter6
Windows via c++   chapter6Windows via c++   chapter6
Windows via c++ chapter6
 
What’s new in c++11
What’s new in c++11What’s new in c++11
What’s new in c++11
 
자바로 배우는 자료구조
자바로 배우는 자료구조자바로 배우는 자료구조
자바로 배우는 자료구조
 
Java_05 class
Java_05 classJava_05 class
Java_05 class
 
Java class
Java classJava class
Java class
 

C# 개요 및 소개 [ 유니티 및 C# 스터디 / 2024-04-19 ]

  • 1. C# 개요 및 소개 김주영 / 유니티 스터디 / 2024-04-19
  • 2. - Hello World - 주요 키워드 - .NET 아키텍처 - C# 타입 시스템(CTS) 개요
  • 4. 주요 키워드 - 객체 지향 언어, 컴포넌트 지향 언어 - 가비지 컬렉터 - Nullable - 언어 통합 쿼리(LINQ) 구문 - 통합 시스템 - 참조 타입 / 벨류 타입 - 제네릭 메서드와 제네릭 타입 - 컬렉션 클래스
  • 5. .NET 아키텍처 - MS 에서 JAVA 의 대안으로 C#과 함께 내놓은 플랫폼 - C# 소스 → IL(중간 언어)로 번역 (C++의 경우 소스 → 기계어로 직접 번역) - CLR(공용 언어 런타임) 위에서 실행. IL 코드를 기계어로 컴파일한 뒤 실행 (C++는 운 영체제 위에 직접 실행) - C#에서 생성된 IL 코드는 다른 .NET 언어와 호환 가능(F#, 비주얼 베이직 등) - 다른 운영체제에서도 돌아감 결론: C# 언어를 쓴다는건 곧 .NET 아키텍처를 사용하는 것
  • 6. C# 타입 시스템 특1) 상속으로 이루어져 있다. C#의 모든 타입은 object 클래스 를 직간접적으로 상속 받고 있다. 따라서 object는 모든 타입의 부 모 클래스이다. 그래서 이런 짓(박싱/언박싱)을 할 수 있다.
  • 7. C# 타입 시스템 특2) 타입이 두 가지로 나뉜다. 벨류 타입: 해당 데이터 직접 포함(스택에 할당) 기존 객체를 새 변수에 새 변수에 할당하면 별도 의 데이터가 복사된다. 각 복사본의 변경 사항은 다른 복사본에 영향을 주지 않는다. - 기본 제공 타입(정수, 유니코드 문자, 부동 소수점, 불리언…) - 열거체 - 구조체* - Nullable - 튜플 참조 타입: 데이터에 대한 참조 포함(힙 할당) 새기존 객체를 새 변수에 할당하면 동일한 데이 터를 참조하게 된다. 변수의 변경이 다른 변수에도 반영된다. new 로 생성하고 가비지 컬렉터가 알아서 메모 리 할당 해제 해준다. - 배열 - 스트링 - 클래스 - 인터페이스 - 델리게이트
  • 8. C# 타입과 맴버 - 클래스 - 구조체 - 인터페이스 - 열거형 - nullable - 튜플
  • 9. 클래스 - 클래스 = 필드 + 매서드 + 기타 맴버함수 - 상속, 다형성, 파생 클래스, 특수화 기능이 있다. - new 연산자로 생성하고 가비지 지컬렉터가 알아서 메모리 해제 해준다. - 새 클래스 클래스 선언 형식: [ 한정자 ] [ 클래스 이름 ] [ 부모 클래스 이름 ] { // 본문 … }
  • 10. 클래스 - 타입 매개변수 - 제네릭 클래스(C++ 의 템플릿 클래스와 매우 유사하다)는 타입 매개변수를 정의한다. - 제네릭 클래스는 타입 매개변수를 사용한 클래스, 구조체, 인터페이스, 델리게이트 - <> 로 감싼 타입이 타입 매개변수 목록이다
  • 11. 클래스 - 부모 클래스 - 생략하면 object 클래스를 직방 상속 - C++ 처럼 암시적 변환 존재
  • 12. 구조체 - 크기가 작은 단순 데이터 저장용으로 쓴다. - 부모 타입으로 못쓴다. (C++ 과 다르게) - System.ValueType 에서 암시적으로 상속받는다. 즉, 동적 할당 생성 못함!
  • 13. 인터페이스 - 클래스나 구조체가 구현할 것을 정의한다. - 인터페이스 내 맴버는 선언만 하고 구현하지 않는다. - 인터페이스는 다중 상속할 수 있다. - 암시적 변환이 가능히다.
  • 14. 열거형 - 상수 값 세트를 정의한다. - 예제의 [Flag] 어트리뷰트는 비트 플래그로 쓸 수 있다는 뜻임
  • 15. Nullable - 기본 제공 타입(정수, 유니코드 문자, 부동 소수점, 불리언…)을 null 타입으로 만들어버리기 - 타입이 벨류 타입이라면 System.Nullable<T> 를 상속받는다. - nullable 여부는 메타데이터로 저장서 컴파일러와 라이브러리가 읽는다.
  • 16. 튜플 - 여러 데이터를 간단히 그룹화 하는 자료 구조이다.
  • 17. C# 프로그램 구성 요소 - 맴버 - 필드 - 매서드 - 함수 맴버 - 식(생략) - 문(생략)
  • 18. 맴버 맴버의 종류 - 상수 - 필드: 클래스와 연결된 변수 - 매서드: 클래스가 수행할 수 있는 작업 - 프러퍼티: 읽기/쓰기 함수 - 인덱서: 인덱싱 관련 함수 - 이벤트: 클래스에서 생성할 수 있는 알림 - 연산자 - 생성자 - 소멸자 - 타입 접근 제한 수준 - public - private - protected - internal - protected internal - private protected
  • 19. 필드 - 클래스의 인스턴스와 연결된 변수이다. - static 아니면 인스턴스가 각각 별도의 복사본을 가지고 있다. - readonly 한정자를 선언하면 읽기 전용 필드가 된다.
  • 20. 메서드 C# 메서드 시그니처는 다음과 같다. - 메서드 이름 - 한정자, 타입, 매개변수 수 - 제네릭 타입 파라미터 수 *** ※ 리턴 타입은 메서드 시그니처가 아니다. 메서드 시그니처를 유지하는 한 오버로드 가능하다.
  • 21. 메서드 - 매개 변수 메서드의 매개변수는 네 종류가 있다. - 벨류 파라미터: 그냥 입력 값을 복사전달한다. - 참조 파라미터: 인수와 동일한 메모리 주소 전달하고, 값이 꼭 있어야함. - 출력 파라미터: 인수와 동일한 메모리 주소 전달하고, 값이 없어도 된다. - 파라미터 배열: 여러개의 인수를 전달한다.
  • 22. 메서드 - 참조 매개 변수 - 인수는 명확한 값을 가진 변수야 한다. - 메서드를 실행하는 동안 인수와 동일한 주소를 나타낸다. - ref 한정사를 사용한다.
  • 23. 메서드 - 출력 매개 변수 - 인수는 명확한 값을 가질 필요 없다. - 참조 매개변수와 비슷하다. - out 한정사를 사용한다.
  • 24. - 파라미터 중 맨 뒤에 있어야 함. - 배열 타입은 1차원 배열이야 함 - 배열 뿐만 아니라 단일 인수를 넣어도 알잘딱 - params 한정사를 사용한다. 메서드 - 매개 변수 배열
  • 25. 함수 맴버 특별한 매서드 맴버이다. - 생성자 - 프러퍼티 - 인덱서 - 이벤트 - 연산자 - 소멸자
  • 26. 함수 맴버 - 생성자 - 인스턴스 생성자, 스테틱 생성자가 있다. - 인스턴스 생성자: 클래스 인스턴스 초기화 - 스테틱 생성자: 클래스 자체를 초기화. static 한정사 사용 - 오버로드할수 있고 매개변수도 가질 수 있다. - 명시하지 않으면 암시적으로 빈 생성자가 만들어진다. - 상속되지 않는다.
  • 27. 함수 맴버 - 프러퍼티 - 필드의 확장 버전. 필드처럼 타입을 지정하고 접근하나, 필드처럼 메모리 위치 를 명시하지 않는다. - ; 로 안 끝나고 {} 안에 get 접근저와 set 접근자 선언을 한다. - get는 해당 프로퍼티 타입을 반환하는 메서드, set는 value 를 매개변수로 받는 메서드 - 잘 설정하면 읽기/쓰기 설정할 수 있다.
  • 28. 함수 맴버 - 프러퍼티
  • 29. 함수 맴버 - 인덱서 - 배열처럼 인덱싱 하는 것 설정하는 맴버이다. - this 와 [] 사이의 매개변수를 넣어서 만든다. - 읽기/쓰기 설정할 수 있다.
  • 30. 이벤트 - 클래스의 다른 맴버 함수에서 호출된다. - event 키워드를 사용한다. 사용법 1. 이벤트 정의 2. 이벤트 발생 메서드 정의 3. 이벤트 핸들러 등록
  • 32. 주목할만한 C# 주요 기능 - 배열, 컬렉션, LINQ - 델리게이트와 람다식 - 어트리뷰트
  • 33. 배열, 컬렉션, LINQ - 배열은고정 크기의 데이터 - 1차원 배열, 다차원 배열, 가변 배열 - 가변적 크기의 자료구조를 쓰려면 컬렉션 - List<T>, Dictionary<TKey, TValue>, HashSet<T>, Queue<T>, Stack<T>, LinkedList<T> - C++ STL 의 이터레이터 같은 것(yield 키워드)도 지원 - 컬렉션은 LINQ 쿼리와 함꼐 사용할 수 있다. - 컬렉션은 C++에서 STL 같은 것, LINQ쿼리는 SQL쿼리 같은 것
  • 35. 델리게이트와 람다 식 - 특정 메서드에 대한 참조 타입이다. - 매서드를 하나의 객체처럼 취급하게 만든다. - 함수 포인터와 비슷하나 보다 OOP 적이고 안전하다고 한다. - 정의 없이 함수만 선언한 것 같은 모습
  • 36. 어트리뷰트 - 메타데이터를 추가하는데 사용한다. - [] 속성 이름과 매개변수를 넣는다. 종류 - [Obsolete]: 더는 사용되지 않는다는 뜻. 해당 코드를 쓰면 컴파일러 경고 - [DllImportable]: 외부 DLL 에서 정적 메서드를 가져올 수 있음 - [Serializable]: 클래스나 구조체가 직렬화 할 수 있음 - [Conditional]: 메서드가 조건부로 호출됨 - [Flag]: 열거형을 비트플래그로 사용함