Machineboy空

C# Class: static Field 정적 필드, 클래스와 인스턴스 본문

언어/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;
    }
}