May every moment inspire me.

study things

C# 클래스 생성과 생성자

my_jennyee 2023. 7. 30. 15:22

클래스를 만들던 중 클래스 내에 클래스 이름과 같은 이름의 함수가 생성자라는 것을 알았다.

// Instrument라는 클래스 생성하기.
class Instrument
    {
    	// 클래스 필드 3개.
        // 정수형 필드 정의 시, 꼭 초기 값을 정의해주지 않아도 된다.
        public int index = 0;

        public gPoint centerPoint;
        public vdCircle circle;
        
        // 얘가 생성자.
        public Instrument(vdCircle circle, int index)
        {
            // 여기서 this는 Instrument 클래스를 뜻함.
            this.circle = circle;
            // Instrument 클래스의 circle 속성이, vdCircle 클래스의 객체 circle를 매개변수로 받을 수 있음.
            // circle 객체를 Instrument 클래스의 멤버 변수인 circle에 할당함.
            this.centerPoint = circle.Center;
            this.index = index;
        }
    }

 

1. 클래스는 붕어빵 틀, 객체(인스턴스)는 붕어빵.

2. 클래스 필드 (class field)

  • 클래스의 필드는 클래스의 인스턴스(객체)가 생성될 때마다 객체의 상태를 나타내는 데이터를 저장하는 변수임.

3. 생성자 Constructor

  • 생성자는 클래스의 인스턴스(객체)가 생성될 때 자동으로 호출되는 특별한 메서드, 즉 함수 중 하나임.
  • 객체를 초기화하고, 객체의 초기 상태를 설정하는 데에 사용됨.
  • 생성자는 클래스의 이름과 동일한 이름을 가지며, 반환 타입이 없음.
  • 외부 클래스나 데이터를 여기로 할당할 때 씀!

! 자 이걸 어떻게 쓰는가!

Instrument instrument = new Instrument(circle, this.instruments.Count);

// Instrument라는 클래스의 instrument라는 새로운 객체를 생성하는데,
// 이 객체는 vdCircle과 int 타입의 변수 두 개를 가지고 있지.
// 그래서 vdCircle의 circle과, int의 this.instruments.Count 결과를 여기로 가지고 와서 객체를 생성함.
// 생성자
public class MyClass
{
    public MyClass()
    {
        // 객체 초기화를 수행하는 생성자
    }
}

// 일반 함수
public class MyMath
{
    public int Add(int a, int b)
    {
        return a + b;
    }
}

// 생성자를 사용하여 객체 생성
// 이렇게 만드는 것이 바로 생성자를 이용해서 객체를 만드는 방법임.
MyClass obj = new MyClass();

// 일반 함수를 사용하여 메서드 호출
MyMath mathObj = new MyMath();
int result = mathObj.Add(3, 5);

 

Q. 정수형 필드 정의 시, 초기 값을 정의해주어야 하는가?
public int index = 0; 과 같이 말이다.

 

A. No.

필드는 초기화되지 않은 경우, 해당 데이터 타입의 기본 값으로 자동으로 초기화됨.

= 필드가 정수형 int인 경우, 0으로 초기화됨.

 

float 타입은 0.0으로 초기화, 불리언 타입은 false로 초기화됨.

public class MyClass
{
    public int intValue;  // 정수형 필드, 초기화하지 않음

    // 생성자에서 초기값을 설정할 수도 있음
    public MyClass()
    {
        intValue = 42;  // intValue를 42로 초기화
    }
}

 

클래스를 만드는 중, IComparable이라는 것이 나왔다.

IComparable이 뭘까?

public class Instrument : IComparable
{
    // ... (생략) ...

    public int CompareTo(object obj)
    {
        return distanceFromDestination.CompareTo(obj);
    }
}

'IComparable'은 .NETFramework에서 제공되는 인터페이스 중 하나다?

 

1. 인터페이스란? (모르겠다)

  • 객체 지향 프로그래밍에서 사용되는 중요한 개념 중 하나임.
  • 정의: 클래스들이 구현해야 하는 매서드들의 집합.
  • 인터페이스는 클래스와 마찬가지로 데이터 타입이며, 클래스가 가져야 하는 기능들을 선언하는 데 사용됨.
  • 인터페이스는 클래스가 가져야 하는 함수들의 시그니처(함수 이름, 매개변수, 반환 타입)를 정의함.
  • ? 클래스가 인터페이스에 속한 매서드를 모두 구현해야한다는 뜻인가?

2. IComparable은?

  • 객체들을 서로 비교할 수 있는 기능을 제공하는 인터페이스입니다.
  • IComparable 인터페이스는 객체들을 정렬하거나 순서를 비교하는 데 사용되며, 객체를 비교하기 위해 'CompareTo' 메서드를 구현해야 함.
  • 'CompareTo' 메서드는 두 개의 객체를 비교하여, 비교 결과에 따라 음수, 0, 양수 값을 반환함.

3. 코드 해석

여기서 Instrument 클래스는 IComparable 인터페이스를 구현함으로써 CompareTo 메서드를 재정의하고 있습니다.

CompareTo 메서드는 distanceFromDestination 필드를 기준으로 다른 객체와 비교하여 결과를 반환합니다.

728x90