3 분 소요

1. 클래스(Class)

클래스(Class)는 객체 지향 프로그래밍의 핵심 요소 중 하나로, 관련된 변수(필드)와 메소드를 그룹화하여 새로운 데이터 유형을 정의하는 데 사용된다.✔
클래스는 객체(Object)의 설계도 역할을 하며, 이를 가지고 인스턴스를 생성하여 수행하게 된다.

public class Dog{
  private string name;

  public string Name{
    get{return name;}
    set{name = value;}
  }

  public void Sound(){
    Console.WriteLine($"{name}이 짖습니다.");
  }
}

public class Program{
  public static void Main(){
    Dog dog = new Dog();
    dog.name = "단지";
    dog.Sound();
  }
}

위에서는 Dog라는 클래스를 선언하여 설계도를 만들어 준다. 실질적인 구현은 아래 Program 클래스의 Main함수에서 Dog라는 형식의 객체를 생성하여 사용하게 된다.
이처럼 클래스를 사용하게 되면 코드 구조화 및 재사용성이 용이해지며, 복잡한 문제도 각 부분을 모듈화하여 처리할 수 있게 된다.

1-1. 생성자

클래스의 생성자란 객체를 초기화 하기 위한 일련의 처리 내용을 의미하며, 이를 통해 인스턴스가 생성되었을 때, 기본적인 객체의 형태를 만들 수 있다.✔

public class Dog{
  public Dog(){  //반환 형식이 없다.
    --- //객체 초기화 내용을 구현하면 된다.
  }
}

이 뿐만 아니라 생성자 또한 오버로딩이 가능하여 아래 예시와 같이 각기 다른 형태의 파라메터에 대한 결과물을 만들 수 있다.

public Dog(){
 '''
}

public Dog(string name, string color){
 '''
}

1-2 this 키워드

this 키워드는 현재 객체를 참조하는 데 사용되는 특수한 키워드이다. this를 사용하여 현재 클래스의 멤버(필드, 속성, 메소드)에 접근하거나 호출할 수 있다.✔

this 키워드는 다음과 같이 사용된다.

1. 필드와 매개변수 이름이 충돌하는 경우

public class Dog{
    private string name;

    public void SetName(string name){
        this.name = name;
    } // 매개변수 name이 this를 통해 클래스 내부 필드에 값을 저장.
}

2. 생성자에서 다른 생성자를 호출할 때.

public class Dog{
    private string name;
    private int age;

    public Dog(string name) : this(name, 1){
        '''
    }

    public Dog(string name, int age){
        this.name = name;
        this.age = age;
    }
}

위 처럼 하나의 생성자가 다른 생성자를 호출할 때 this 키워드를 사용할 수 있다. 중복 코드를 방지하고 초기화 로직을 재사용할 수 있다.

3. 인스턴스 메소드 내에서 현재 객체 참조하기.

public class Dog{
    private int age;

    public void addAge(){
        this.age++; // 'age' 필드 증가(this 생략 가능)
    }
}

인스턴스 메서드 내부에서 현재 객체에 대한 참조가 필요한 경우 this 키워드를 사용하여 해당 객체의 멤버에 엑세스 할 수 있다.

** 4. 확장 메서드 선언(Extension Method) **

public static class StringExtensions{
    public static bool IsPalindrome(this string str){
        // 문자열이 회문인지 확인하는 로직 구현
    }
}

string text = "level";
bool isPalindrome = text.IsPalindrome();

확장 메서드(Extensions Method)는 외부 클래스의 기능을 확장하기 위해 정적 클래스 내부에서 정의가 된다. 첫 매개변수로 this 키워드와 함께 확장 대상 개체가 전달된다.

2. 상속(Inheritance)

상속은 객체 지향 프로그래밍의 핵심 개념 중 하나로, 한 클래스가 다른 클래스의 속성과 메서드를 가져오는 기능을 말한다.✔
이를 통해 코드 재사용성을 높이고, 프로그램의 구조를 더욱 체계적으로 만들 수 있다.

상속 관계에서 기본 클래스는 “부모 클래스” 또는 “기반 클래스”라고 하며, 상속 받는 클래스는 “자식 클래스” 또는 “파생 클래스”라고 한다.

public class Animal{
    public string Name{ get; set; }
   
    public void Sound(string name){
        Console.WriteLine($"{Name}이 짖습니다.");
    }
}

public class Dog : Animal{
    public void Eat(){
        Console.WriteLine($"{Name}이 밥을 먹습니다.");
    }
}

public class Program{
    public static void Main(){
        Dog dog = new Dog();
        dog.Name = "단지";

        dog.Eat();
        dog.Sound();
    }
}

Animal이라는 기본 클래스를 선언하였으며, Name이라는 속성과 Sound라는 메소드를 정의하였다. Dog 클래스가 Animal 클래스를 상속하여 Eat 메소드를 정의하였다. 따라서 “dog” 인스턴스는 Animal 클래스의 Sound와 Dog 클래스의 Eat 메소드 모두를 사용할 수 있다.

상속은 코드의 재사용성을 증진시켜주며, 실제 세계의 개체 관계를 보다 자연스럽게 모델링할 수 있도록 돕는다.
하지만 복잡한 상황에서 남용하면 코드 유지보수가 어려워질 수 있으므로 적절히 사용해야 한다.

부모 클래스에서 받은 메소드를 그대로 사용하기 싫다면 재정의하면 된다.

2-1. 오버라이딩(Overriding)

오버라이딩이란 부모 클래스의 메소드를 파생 클래스에서 재정의하는 것을 의미한다.✔

public class Animal{
    public string Name{get; set;}

    public virtual void Initiate(){
        Console.WriteLine("나는 부모 클래스 입니다");
    }
}

public class Dog : Animal{
    public override void Initiate(){
        Console.WriteLine("나는 Dog 클래스 입니다");
    }
}

public class Cat : Animal{
    public override void Initiate(){
        Console.WriteLine("나는 Cat 클래스 입니다");
    }
}

override 키워드를 작성해주며 다형성을 용이하게 한다.

태그: ,

카테고리:

업데이트:

댓글남기기