클래스 (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. 구조체형 ] 

구조체형  ← 용어를 클릭하면 자세한 내용을 볼 수 있습니다!!

 

자료형 (Data Type)

이전에 < C# 개요 > 포스팅에서 언급했듯이, C#은 C, C++, Java를 베이스로 설계한 언어이므로 연산자, 문장 구조 및 의미는 모두 표준 C언어와 비슷하고 객체지향 특성은 C++, 자바와 유사하다. 객체

webit22.tistory.com

 

  • 차이점 :
    • 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

BELATED ARTICLES

more