1) 특징
- 캡슐화
- 관련된 데이터와 기능을 하나의 단위로 묶는 것을 의미한다.
- 상속
- 기존의 클래스를 확장하여 새로운 클래스를 만드는 메커니즘이다.
- 다향성
- 하나의 메서드 이름이 다양한 객체에서 다르게 동작할 수 있도록 하는 것으로, 오버로딩과 오버라이딩을 통해 구현된다.
- 추상화
- 복잡한 시스템이나 개념을 단순화하여 필요한 기능에 집중하는 것이다.
- 객체는 상태(데이터)와 행동(메서드)을 가지며, 실제 게계의 개체나 개념을 모델링한다.
- 객체들 간의 상호작용을 통해 프로그램이 동작하고, 모듈화와 재사용성을 높인다.
2) 클래스
- 클래스는 객체를 생성하기 위한 템플릿 또는 설계도 역할을 한다.
- 객체를 생성하기 위해서는 클래스를 사용하여 인스턴스를 만들어야 한다.
3) 객체
- 객체는 클래스의 인스턴스다. 클래스의 실체화된 형태라고 할 수 있다.
4) 구조체 vs 클래스
- 구조체는 값 형식이며, 스택에 할당되고 참조로 값이 복사된다.
- 클래스는 참조 형식이며, 힙에 할당되고 참조로 전달되므로 성능 측면에서 다소 차이가 있다.
- 구조체는 상속을 받을 수 없지만 클래스는 단일 상속 및 다중 상속이 가능하다.
- 구조체는 작은 크기의 데이터 저장이나 단순한 데이터 구조에 적합하며, 클래스는 더 복잡한 객체를 표현하고 다양한 기능을 제공하기 위해 사용된다.
대표적인 접근 제한자 예시
- public : 외부에서 자유롭게 접근이 가능하다.
- private : 같은 클래스 내부에서만 접근 가능하다.
- protected : 같은 클래스 내부와 상속받은 클래스에서만 접근 가능하다.
- 필드는 클래스 내부에 선언되어 있는 변수로, 클래스의 상태를 나타내는 데이터를 저장한다.
- 메서드는 클래스 내부에 선언되어 있는 함수로, 클래스의 동작을 정의하고 실행한다.
1) 생성자
- 생성자는 객체가 생성될 때 호출되는 특별한 메서드다.
- 생성자는 클래스와 동일한 이름을 가지며, 반환 타입이 없습니다.
- 객체를 생성할 때 new 키워드와 함께 호출된다.
2) 소멸자
- 소멸자는 객체가 소멸되는 시점에서 자동으로 호출되는 특별한 메서드다.
- 클래스와 동일한 이름을 가지며, 이름 앞에 ~ 기호를 붙여 표현한다.
- 소멸자는 반환 타입이 없고 매개 변수를 가질수 없다.
- 프로퍼티는 클래스 멤버로서, 객체의 필드 값을 읽거나 설정하는데 사용되는 접근자 메서드의 조합이다.
- 프로퍼티는 필드와 마찬가지로 객체의 상태를 나타내는 데이터 역할을 하지만, 외부에서 접근할 때 추가적인 로직을 수행할 수 있다.
※ 자동 프로퍼티[접근 제한자] [데이터 타입] 프로퍼티명 { get; set; }
※ 같은 타입이지만 다양한 동작을 수행할 수 있는 능력
1) 가상(Virtual) 메서드
- 가상 메서드는 기본적으로 부모 클래스에서 정의되고 자식 클래스에서 재정의할 수 있는 메서드다.
- 가상 메서드는 virtual 키워드를 사용하여 선언되며, 자식 클래스에서 필요에 따라 재정의 될 수 있다.
2) 추상(Abstract) 클래스와 메서드
- 추상 클래스는 직접적으로 인스턴스를 생성할 수 없는 클래스
- 주로 상속을 위한 베이스 클래스로 사용된다.
- 추상 클래스는 abstract 키워드를 사용하여 선언되며, 추상 메서드를 포함할 수 있다.
- 추상 메서드는 구현부가 없는 메서드로, 자식 클래스에서 반드시 구현되어야 한다.
3) 오버라이딩과 오버로딩
- 오버라이딩 / 함수를 덮어쓰게 하는 것
- 부모 클래스에서 이미 정의된 메서드를 자식 클래스에서 재정의하는 것을 의미한다.
- 이는 상속 관계에 있는 클래스 간에 발생하며, 메서드의 이름, 매개변수 및 반환타입이 동일해야 한다.
- 오버로딩 / 함수를 읽어올 때 쓰는 것
- 동일한 매서드 이름을 가지고 있지만, 매개변수의 개수, 타입 또는 순서가 다른 여러 개의 메서드를 정의하는 것을 의미한다.
- 제너릭은 클래스나 메서드를 일반화시켜 다양한 자료형에 대응 할 수 있는 기능이다.
- C#에서는 < T > 형태의 키워드를 이용하여 제너릭을 선언한다.
- 패턴을 만들거나 구조를 만들 때 자주 사용된다.
- out, ref 키워드는 메서드에서 매개변수를 전달할 때 사용한다.
- out 키워드는 메서드에서 반환 값을 매개변수로 전달하는 경우에 사용한다.
- ref 키워드는 메서드에서 매개변수를 수정하여 원래 값에 영향을 주는 경우에 사용한다.
C#에서 콘솔 text게임을 만들던 중 "잘못된 입력입니다." 가 나오게 하고싶었다.
Thread.Sleep(1000);를 이용하면 "잘못된 입력입니다." 화면이 나오고 1초 뒤에 사라진다.