-
목차
클래스 형식과 접근 한정자
객체 생성과 멤버 접근
생성자와 소멸자
정적 멤버 선언과 사용
클래스 참조
this클래스 형식과 접근 한정자
클래스 개요
클래스란?
- 변수와 메서드를 그룹화한 것
- 주요 개념
- 그룹화를 위해 class 키워드와 형식 사용
- new 연산자로 생성하여 사용
- new를 사용하지 않으면 같은 클래스를 참조할 수 있는 변수가 됨(클래스 참조 변수)
- 클래스를 new를 통해 생성하면 객체가 됨
인스턴스와 객체의 관계
- 인스턴스는 본질, 객체는 실물인 형상

test1과 test2 객체는 같은 A 인스턴스를 가진다. 클래스 형식
- 클래스 형식과 구조체 형식은 유사하다
struct struct_name { }
class Cass_Name { }
xxx.멤버 변수, xxx.멤버 메서드
- 구조체 선언은 값형, 클래스 선언은 참조형
- 형식
class Class_Name
{
variable 선언; // 멤버변수
method 선언; // 멤버함수
}
예시 코드
class Date { int year, month, day; void Print() { Console.WriteLine($"{year} {month} {day}"); } }접근 한정자(access modifier)
- 클래스 멤버에 대한 접근 권한 설정
- 접근 한정자 : private, protected, public, internal, protected internal
- 클래스 자체에 적용하는 접근 한정자
public : 명시적
internal : 암시적
* 클래스 안의 멤버들에 대한 암시적 접근 한정자는 private이며, namespace 안의 클래스에 대한 암시적 접근 한정자는 internal 이 디폴트이다. 따라서 명시적으로 표시해주는 것이 좋은 코딩 습관이다.
- 형식
[접근 한정자] class Class_name
{
[접근 한정자] variable 선언;
[접근 한정자] method 선언;
}
- 클래스 안에서 접근 한정자의 역할
public
- 클래스 내외부에서 모두 접근 가능
- 상속관계에서도 위와 동일하게 접근 가능
private
- 클래스 또는 구조체 안에서만 멤버에 접근
- 클래스 외부에서 사용 안됨
protected
- 클래스 안에서는 private와 같은 역할
- 하위 클래스 안에서는 상위 protected에 접근 가능(private와 동일한 역할)
- 어셈블리 안에서 접근 한정자의 역할
internal
- 같은 어셈블리(exe, dll)안에 있을 때만 내외부에서 멤버에 접근 가능
- 클래스 서두에 접근 한정자 생략은 internal을 생략한 것
protected internal
- 같은 어셈블리(exe, dll)안에서는 internal과 동일
- 서로 다른 어셈블리 안에서 상속관계일 때 하위 클래슨느 상위 클래스의 protected internal 멤버에만 접근할 수 있다
- 외부에서는 접근할 수 없다
객체 생성과 멤버 접근
- 객체 생성 키워드 : new
- 객체 해제는 가비지 컬렉터에게
- 접근 한정자에 따라 접근 제한
- 객체의 멤버는 ','과 함께 표기
objectName.variable
objectName.method
생성자와 소멸자
개념
- 생성자(constructor)
객체를 생성할 때 자동으로 호출되는 메서드
- 소멸자(destructor)
객체가 소멸될 때 호출되는 메서드
- 호출되는 시기?
생성자 : new
소멸자 : 가비지컬렉터
생성자의 형식
- 기본 생성자
클래스명과 같은 이름을 갖는다
매개변수를 갖지 않는다
리턴형은 없음
접근 한정자는 public
- 생성자(new를 통해서 생성될 때 외부에서 값을 가져갈 수 있도록 한다)
클래스명과 같은 이름을 갖는다
매개변수가 있음
리턴형은 없다
접근 한정자는 public
소멸자 형식
- 클래스명과 같음
- 리턴형 없음
- 접근 한정자 없음
- ~로 시작함
예시 코드
class MyClass { ~MyClass() { } }소멸자의 특징
- 소멸자는 클래스에만 있음
- 소멸자는 오직 한 개임
- 소멸자는 상속 또는 오버로딩 될 수 없음
- 소멸자는 임의로 호출 불가
- 소멸자는 접근 한정자나 매개변수가 없다
정적 멤버 선언과 사용
언어에 따른 static 역할 비교
C : 변수 값 유지
C++ : 객체 안에서 변수 공유
C# : 객체를 생성하지 않고 멤버 사용
ex ) Console.WriteLine()
Main() 안에서 같은 멤버를 호출할 때
public class Practice { static void Main(string[] args) { Print(); } private static string message = "Hello World!"; static void Print() { Console.WriteLine(message); } }클래스 참조
클래스 형태
- 선언한 클래스 : 참조형 클래스 변수
MyClass myRefTest;
- new로 생성한 클래스 : 객체
MyClass myTest = new MyClass();
myRefTest = myTest; // 참조
예시 코드
public class Practice { static void Main(string[] args) { MyClass myClass = new MyClass(); MyClass refClass = myClass; refClass.number = 7; Console.WriteLine(myClass.number); } } class MyClass { public int number; public MyClass() { number = 12; } }this
- this는 객체 자신을 참조하는 키워드
- 사용 형식 : this.member
- 메소드의 매개 변수와 멤버 변수명이 같을 때
this.memberVariable = 매개변수;
예시 코드
public class Practice { static void Main(string[] args) { MyClass testClass = new MyClass(12); Console.WriteLine(testClass.number); } } class MyClass { public int number; public MyClass(int number) { this.number = number; } }'프로그래밍 > C#' 카테고리의 다른 글
[10강] 배열/객체배열, 속성/인덱서 비교 (0) 2022.06.20 [09강] 속성과 인덱서 (0) 2022.06.13 [07강] 프로젝트 실습 - 스마트 밥솥 (0) 2022.05.29 [06강] 파일 입출력 (0) 2022.05.02 [05강] 배열 (0) 2022.04.24