언어/C#
C# Class: static Field 정적 필드, 클래스와 인스턴스
안녕도라
2025. 1. 20. 16:07
객체지향 프로그래밍(OOP, object oriented programming)이란?
코드 내 모든 것을 객체(Object)로 표현하려는 프로그래밍 패러다임
- 객체(Object) : 세상의 모든 것(ex. 사람, 연필, 자동차, 파일, 모니터, 상품 주문 등)
어떻게?
객체의 주요 특징 (속성, 기능)만 뽑아내서 코드로 표현하자!
- 객체 : 사람
- 속성(데이터): 피부색, 키, 몸무게
- 기능(메소드): 걷기, 뛰기, 보기, 듣기
Class란?
객체(Object)를 만들기 위한 청사진
- 클래스(Class) : 자동차 설계도, 실체 X
- 자동차가 어떤 속성과 기능을 가져야 하는지 지정
- 속성 중에 변경가능한 것과 변경 불가능한 것을 결정
- 객체(Object) : 생산된 실제 자동차, 실체 O
- 클래스를 이용해 만든 객체는 실체를 가진다.
- 동일 클래스로 객체 3개를 만들면 이 세 객체는 서로 구분되는 고유한 실체를 가지며 저마다 메모리 공간을 차지한다.
정적 필드와 static 한정자
static : 메소드나 필드가 클래스의 인스턴스가 아닌 클래스 자체에 소속되도록 지정하는 한정자
클래스는 단 하나만 존재하지만, 인스턴스는 여러 개 존재할 수 있다.
- 어떤 필드가 클래스에 소속된다는 것은 곧 그 필드가 프로그램 전체에서 유일하게 존재한다는 것을 의미한다.
- 프로그램 전체에 걸쳐 공유해야하는 변수가 있다면 정적 필드 이용
정적 메소드와 인스턴스 메소드
- 정적 메소드 : 인스턴스를 생성하지 않아도 호출이 가능한 메소드
- 객체 내부 데이터를 이용할 일이 없는 경우
class MyClass
{
public static void StaticMethod()
{
}
}
MyClass.StaticMethod() // 인스턴스를 만들지 않고도 바로 호출 가능
- 인스턴스 메소드: 인스턴스를 생성해야만 호출이 가능한 메소드
- 객체 내부 데이터를 이용해야 하는 경우
class MyClass
{
public void InstanceMethod()
{
}
}
MyClass obj = new MyClass();
obj.InstanceMethod(); // 인스턴스를 만들어야 호출 가능
this 키워드, this() 생성자
this 키워드: 객체 자신을 지칭하는 키워드
- 객체 외부: 객체의 필드나 메소드에 접근할 때는 객체의 이름 사용
- 객체 내부: 자신의 필드나 메소드에 접근할 때는 this 키워드 사용
this() : 자기 자신의 생성자
using System;
public class SpaceAge
{
// 인스턴스 필드
private double age;
public SpaceAge(int seconds)
{
// this를 통해 class가아닌 class 모양의 객체에 접근하는 것.
this.age = seconds / 31557600.0;
}
// 인스턴스 메소드
public double OnEarth()
{
return this.age;
}
}