글로벌 객체지향 프로그래밍 8주차 - C# 클래스와 접근 제한자
클래스
정의
- 프로그램의 대상이 되는 사물을 class라는 키워드를 이용해 정의한 것
- 클래스를 가지고 new 키워드를 사용해 객체(인스턴스) 생이 가능
선언방법
접근제한자 class 클래스명{
//필드, 속성, 메서드, 이벤트의 구현
접근제한자 자료형 변수명;
접근제한자 자료형 변수명{
get{}
set{}
}
접근제한자 반환형 함수명(매개변수1, ..., 매개변수n){
...
}
접근제한자 event Eventhandler 이벤트 변수;
}
구성요소
- 클래스로부터 객체를 생성하여 사용함
| 종류 | 설명 |
|---|---|
| 메소드(Method) | 클래스 내에서 동작하는 코드 블럭 동사 or 동사+명사 방식으로 이름을 정하는 경우가 많음 매개변수의 제한은 없지만, 값은 매개변수의 개수와 동일해야 접근제한자 데이터형 메소드명(매개변수) { return 반환값; }를 이용하여 생성 가능함 메소드명(매개변수)를 이용하여 접근 가능함 |
| 속성(Property) | 클래스 내의 데이터를 외부에서 사용 및 수정 가능하게 설정할 수 있게 하는 멤버 C#과 같은 객체지향 언어에서는, 캡슐화의 목적을 위해 사용됨 속성은 필드 1개에 get과 set이라는 메소드 2개를 필요로 함 |
| 필드(Field) | 클래스 객체의 상태를 유지하는데 사용됨 같은 클래스라도, 객체들은 각각의 필드를 가짐에 따라 서로 다른 상태를 지니게 접근제한자의 설정에 따라, 외부 객체나 상속 객체에서도 노출이 가능함 |
| 이벤트(Event) | 객체 내부의 특정 상태나, 어떤 일이 일어난 것을 외부에 전달하는 목적으로 사용됨 예시: 버튼을 클릭 할 경우, 버튼 이벤트에 가입된 모든 외부 객체에 버튼이 동작 되었음을 통보하는 것 |
중첩 클래스
정의
- 하나의 클래스 내부에서 다른 클래스를 정의하는 것
- 클래스를 그룹화 및 클래스의 사용범위를 제한하는 것이 가능함
사용방법
1
2
3
4
5
class Class1{
class 중첩클래스명{
...
}
}
예시
class Class1{
int outerValue;
class Class2{
Class1 class = new Class1();
class.outerValue = 1;
}
}
partial 클래스
정의
- 클래스의 내용을 다른 파일로 분할하여 구현한 것
- 파일은 다르지만, 컴파일 과정에서 하나의 클래스로 파일이 결합됨
- partial 예약어를 이용하여 클래스의 분할이 가능함
주의점
- 분할된 파일은 모두 동일 접근 제한자를 사용해야 함
- 다를 경우 충돌이 발생
- C#은 다중 상속을 지원하지 않으므로, 부모 클래스가 다를 경우 컴파일 오류가 발생함
객체
정의
- 작성된 클래스를 new 키워드를 이용하여, Heap 메모리에 생성하는 것
사용 방법
1
클래스명 객체명 = new 클래스명();
예시
1
Circle circle = new Circle();
호출방법
Static 예약어가 없을 경우
- 객체이름.멤버;
- 예시)
1
dog.name;
Static 예약어가 있을 경우
- 클래스명.멤버;
- 예시)
1
Dog.AnimalName
This
- 자신의 객체의 멤버를 접근할 때 사용함
- 객체 외부에서는 객체의 메소드나 변수에 접근할 때 객체이름.메소드 나 객체이름.변수를 이용하여 접근함
- 객체 내부에서는 자신의 변수나 메소드에 접근할 때 사용함
생성자
- 초기화를 위한 메소드로, 인스턴스를 생성할 때 호출됨
- 클래스명과 동일한 이름을 사용하며, 인수를 어떤 것이든 사용 가능함
- 반환형이 존재하지 않음
접근제한자
정의
- 클래스 내부의 멤버의 접근을 제한하는 역활로 사용됨
종류
private
- 디폴트 접근제한자로, 클래스 내부에서만 사용이 가능함
public
- 클래스의 외부에서 접근이 가능함
protected
- 상속받은 하위 클래스에서만 접근이 가능함
internal
- 어셈블리(NET 기반 어플 배포, 버전 제어, 재사용 등…)의 접근을 허용함
- 프로젝트 생성 시, internal로 선언한 변수와 형식은 동일 프로젝트 내에서만 접근이 가능함
protected internal
- 동일 프로젝트 내에서 상속을 받는 자식 클래스에서만 접근이 가능함
사용 원칙
- 필드는 private로 지정하여 외부에서의 접근을 차단하기
- 객체 지향 원칙 중 하나인 캡슐화 준수
- 메소드는 public으로 지정하기
- 이를 정보 은닉이라고 함
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.