클래스를 이야기하려면 먼저 객체지향 프로그래밍이라는것을 먼저 알아야한다
사실 예전에도 객체지향에 대해 정리해둔 글이 있다
클래스와 오브젝트는 객체지향의 핵심이다.
객체지향은 '사람이 현실 세상을 보는 방식'에 가깝게 프로그램을 완성하는것'이다
클래스 : 표현하고 싶은 대상을 추상화하여 대상과 관련된 변수와 메서드를 정의하는 틀이다
(추상화 : 대상의 핵심적인 개념과 기능을 추려내는것)
오브젝트 : 물건의 설계도인 클래스와 달리 그 설계도로 만들어낸 실제 존재하는 물건(실체)이다
그림을 보면 더 이해가 쉬울 것이다 Human이라는 설계도(클래스)를 이용해
철수와 영희라는 사람(오브젝트)를 만들어내는 원리인 것이다.
마치 전세계에게 몇십억의 인구가 있지만 모두 '인간'으로 분류되듯 아무리 많은 오브젝트들이라고
결국 하나의 클래스로 분류될 수 있다
이렇게 클래스라는 툴로 오브젝트를 찍어내 실체화하는 것을 인스턴스화 한다고 하며
인스턴스화를 이용해 생성된 오브젝트들을 인스턴스라고 한다
#3 C# 프로그래밍 (메서드, 간단한 코딩예시, 클래스,인스턴스,접근제한자,참조타입)
이번에 해볼것은 바로 유니티에서 쓰이는 C# 프로그래밍이다하지만 지금 이 글을 쓰고 있는 시점과 비슷하게 이미 나는 C# 공부를 따로 하고 있고 CLR, 변수, 스택과 힙, 데이터 형식, 박싱&언박
sangeun00.tistory.com
위 글에 이렇게 정리를 해두었다. 이것이 객체지향이다
여기서 조금 더 나아가 이 세상에서 객체라고 할 만한 모든것은 속성과 기능이 있다
예를들어 사람의 속성은 키,몸무게,국적,피부색 등이 있고 기능으로는 걷기, 뛰기, 생각하기가 있으며
연필의 속성은 필기도구, 학용품이며 기능으로는 글씨쓰기, 색칠하기 등이 있다
그렇다면 객체의 이런 속성과 기능은 어떻게 C#에서 표현할 수 있을까?
바로 속성은 데이터(변수), 기능은 메서드로 구현해주면 된다
그럼 이제 클래스에 대해서 설명해보겠다
클래스가 자동차 설계도라면 객체는 그 설계도를 가지고 만든 자동차라고 생각하면 된다
그러니 클래스는 실체가 없지만 그 클래스로 만들어낸 객체는 실체가 있는 것이다
string a = "123"
이 코드에서 string은 C#에서 이미 정의된 문자열을 다루는 "클래스" 이며
a는 "객체"이다. 그리고 a를 일컬어서 string의 실체(Instance)라고 하는데 일반적으로 발음 그대로 "인스턴스"라고 부른다
*클래스는 객체 지향적인 관점에서 보면 객체를 위한 청사진임과 동시에 데이터와 메서드를 묶는 집합이다
또 코드에서 보는 클래스는 기본데이터를 조합하여 만든 또 하나의 복합 데이터 형식이다.
class 클래스의 이름
{
// 데이터와 메서드
}
클래스를 선언하는 방법은 다음과 같다
class Cat
{
public string Name;
public string Color;
public void Mewo()
{
Console.WriteLine("야옹~");
}
}
그 다음은 이 코드를 보자 Name, Color 처럼 클래스 안에 선언된 변수들을 필드(Field)라고 한다
그리고 필드와 메서드를 비롯하여 클래스 내에 선언된 요소들을 멤버(Member)라고 한다
하지만 클래스 Cat은 어디까지나 청사진일뿐 실체가 없으니 MainApp 클래스에서
Cat의 인스턴스를 만들어주었다
<생성자>
객체가 생성될 때는 생성자가 호출되고 소멸할때는 종료자가 호출된다
둘다 메서드 형식이고 이번엔 이 둘에 대해서 알아보도록 하자
class 클래스이름
{
한정자 클래스이름 (매개변수목록)
{
//
}
//필드
//메서드
}
우선 생성자의 선언 형식이다. 사실 생성자는 클래스를 선언할때 컴파일러에서 생성자를 만들어준다
그럼 왜 굳이 생성자를 구현해야 할까?
객체를 다루다 보면 객체를 생성하는 시점에 객체의 필드를 원하는 값으로 초기화 해주고 싶을때 사용한다고 한다
매개변수를 입력받아 원하는 값으로 필드를 초기화할 수 있는 최적의 장소가 바로 생성자이다
<정적필드(static)>
static은 사전적으로 정적이라는 뜻을 갖고 있다. 말그대로 움직이지 않는다는 뜻
C#에서 static은 메서드나 필드가 클래스의 인스턴스가 아닌
클래스 자체에 소속되도록 지정하는 한정자이다
한 프로그램 안에서 인스턴스는 여러 개 존재할 수 있지만 클래스는 단 하나만 존재한다
즉, 어떤 필드가 클래스에 소속된다는것은 곧 그 필드가 프로그램 전체에서 유일하게 존재한다는것을 의미한다
class myclass
{
public int a;
public static int b;
}
class MainApp
{
static void Main(string[] args)
{
myclass mc = new myclass();
mc.a++;
myclass.b++;
}
}
이 차이인 것이다. a는 static 한정자가 없어 다른 클래스에서 a변수를 사용하려면
클래스를 인스턴스를 만들어야 하지만
b는 프로그램 전체에 하나밖에 존재하지 않는다. 그러니 이렇게 간편하게 가져올 수 있는것
class Myclass
{
public static void StaticMethod()
{
//
}
public void InstanceMethod()
{
//
}
}
Myclass.StaticMethod();
Myclass myc = new Myclass();
myc.InstanceMethod();
메서드도 마찬가지이다. static을 붙이느냐 안붙이느냐에 따라 나중에 메서드를 호출할때
인스턴스를 만들지 안만들어도 될지에대한 여부가 달라지게 된다
<this 키워드>
this는 객체가 자신을 지칭할 때 사용하는 키워드이다
객체 외부에서 객체의 필드나 메서드에 접근할때 객체의 이름을 사용하지만
객체 내부에서 자신의 필드나 메서드에 접근할때 this키워드를 사용한다
SetName 메서드에 매개변수를 받아 Employee 클래스의 필드에 있는 변수값을 바꿔버리는 구조이다
이렇게 생각하면 보기 편하다. this가 붙으면 클래스의 필드, 그냥 Name은 메서드의 매개변수이다
'C# > 2. 메서드 & 클래스' 카테고리의 다른 글
메서드, 매개변수, 반환 타입, return문, 참조에 의한 전달&반환, ref/out 키워드, 메서드 오버로딩, 명명된 인수, 선택적 인수, 로컬 함수 (1) | 2025.03.21 |
---|