클래스 (Class)
2021. 6. 14. 23:46
728x90
클래스 (class) : 변수와 메서드를 그룹화한 것
[ 클래스 특징 ]
- "new" 명령을 사용하여 class를 생성
- 만약 "new"를 사용하지 않는다면, class를 참조할 수 있는 변수가 됨 ( = "클래스 참조 변수" )
class를 정의하고 사용하는 방법은 아래와 같다:
[접근한정자] class 클래스명 {
[접근한정자] 변수 선언;
[접근한정자] 메서드 선언;
}
[ 접근한정자 ]
접근한정자 (access modifier) : class 멤버에 대한 접근 권한 설정
- public, private, protected, internal, protected internal, ...
- class 자체에 적용하는 접근한정자 : public (명시적), internal (암시적)
1) public
- class 내부/외부에서 모두 접근 가능
- 상속 관계에서도 동일하게 접근 가능
- public 사용 시, class 앞에 명시적으로 붙여줌 :
public class 클래스명 { }
2) private
- class 또는 구조체 안에서만 멤버에 접근 가능
- class 외부에서는 사용 불가능
3) protected
- class 안에서는 private과 같은 역할을 함
- 하위 클래스 안에서는 상위 protected 멤버에 접근 가능 (private과 동일한 역할)
4) internal
- 같은 어셈블리(.exe, .dll) 안에 있을 때만 내부/외부에서 멤버에 접근 가능
- class 앞에 접근한정자가 없다면 internal이 생략되어서 암시적으로 사용되는 것을 의미함 :
class 클래스명 { } == internal class 클래스명 { }
5) protected internal
- 같은 어셈블리(.exe, .dll) 안에서는 internal과 동일한 역할
- 서로 다른 어셈블리 안에서 상속관계일 때, 하위 class는 상위 class의 protected internal 멤버에 접근할 수 있음
- 외부에서는 접근할 수 없음
[ 생성자 ]
생성자 (constructor) : 객체를 생성할 때 자동으로 호출되는 메서드 ("new" 명령 사용 시 생성자가 호출됨)
- 기본 생성자
- 클래스명과 같은 이름을 사용
- 반환하는 형식이 아님
- 접근한정자 : public - 기타
- 매개변수가 있음
- 나머지는 기본 생성자와 동일
[ 소멸자 ]
소멸자 (destructor) : 객체가 소멸될 때 호출되는 메서드 (가비지 컬렉터가 관여할 때 소멸자가 호출됨)
- 클래스명과 같은 이름을 사용
- 반환하는 형식이 아님
- 접근한정자 사용 X 대신 "~"를 앞에 붙임
class Student {
~Student(){
...
}
}
[ 멤버 특징 ]
class는 객체를 생성하지 않고 인스턴스/정적멤버를 생성함.
- 인스턴스 멤버 : class의 특정 인스턴스와 관련있음.
→ 예를 들어, WinForm에서 객체 하나를 더블 클릭하면 form의 class 모듈 알에 있는 event에 접근할 수 있게 됨. 이때 WinForm의 객체라고 하면 button, datagridview 등이 있음
- 정적 멤버 (static) : 외부에서 해당 변수를 호출하여 사용할 수 있음
정적멤버는 전체 class에 속하고, class의 인스턴스가 존재하지 않아도 사용할 수 있음
- this : 객체 자신을 참조하는 키워드
- syntax : this.member
- 메서드의 매개변수랑 멤버변수명이 같을 때 사용함. 아래의 예시를 보면, 등호 기준으로 왼쪽 number는 멤버변수명, 오른쪽 number는 매개변수명
this.number = number;
[ 인스턴스 vs. 객체 ]
인스턴스는 본질, 객체는 실물/형상이라고 볼 수 있음 (예를 들면, 객체가 우유곽이고 인스턴스는 우유(액체) 정도?)
A test1 = new A(); //인스턴스 A를 가지는 객체 test1을 생성
등호를 기준으로 왼쪽("A test1")은 객체, 오른쪽("new A()")은 인스턴스이다.
[ class형 vs. 구조체형 ]
구조체형 ← 용어를 클릭하면 자세한 내용을 볼 수 있습니다!!
- 차이점 :
- class 선언은 참조형식
- 구조체 선언은 값형식
- 공통점 :
- 구조가 매우 유사함
- class/구조체를 호출할 때 사용 방식이 같음
- 사용 형식 : 클래스명.멤버변수 or 클래스명.멤버메서드
class 클래스명
{
//멤버변수, 멤버메서드 선언
}
struct 구조체명
{
//멤버변수, 멤버메서드 선언
}
728x90
'C# > C# 문법' 카테고리의 다른 글
델리게이트, 이벤트 (0) | 2021.06.15 |
---|---|
인터페이스 (Interface) (0) | 2021.06.14 |
매개변수 (Parameter) (1) | 2021.06.14 |
메서드 (0) | 2021.06.13 |
자료형 (Data Type) (0) | 2021.06.13 |