본문 바로가기

CS/C#

[ C# ] 객체지향 프로그래밍

1. SOLID 원칙

SOLID 원칙은 객체지향 프로그래밍의 5가지 설계 원칙으로,  유지 보수 및 확장성을 위한 방법을 제공한다.

 

단일 책임 원칙 (SRP : Single Responsibility Principle)

= 각 클래스는 하나의 역할만 가지고 있어야 한다.

 

개방-폐쇄 원칙 (OCP : Open-Closed Principle)

= 확장에 열려있고, 변경에 닫혀 있어야 한다.

= 새로운 기능을 추가하는 경우, 기존 코드를 변경하지 않고 확장할 수 있어야 한다.

 

리스코프 치환 원칙 (LSP : Liskov Substitution Principle)

= 하위 클래스는 상위 클래스를 대체할 수 있어야 한다.

= 자식 클래스는 부모 클래스의 필드 및 메서드를 사용할 수 있어야 한다.

 

인터페이스 분리 원칙 (ISP : Interface Segregation Principle)

= 인터페이스는 최소한의 기능만을 제공해야 한다.

 

의존 역전 원칙 (DIP : Dependency Inversion Principle)

= 상위 모듈은 하위 모듈에 의존해서는 안되며, 양쪽 모두 추상화에 의존해야 한다.

= 하위 모듈의 변경이 상위 모듈에 영향을 주지 않기 위해 인터페이스나 추상 클래스에 의존해야 한다.

 

2. 다형성

다형성은 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미한다.

 

이를 통해 코드의 재사용성, 유연성, 유지보수성을 향상시킬 수 있다.

 

보통 override, overload, interface를 통해 구현한다.

 

3. override, overload

override

= 같은 메서드 이름 및 같은 매개변수 목록으로 상위 클래스의 메서드를 재정의하는 기법

class A
{
    public virtual void show()
    {
        Console.WriteLine("A");
    }
}

class B : A
{
    public override void show()
    {
        //base.show();
        Console.WriteLine("B");
    }
}

 

override를 하기 위해서는 부모 클래스에서 virtual 키워드를 추가해야 한다.

base.show()를 사용하면 상위 클래스의 메서드를 그대로 가져올 수 있다.

 

overload

= 같은 메서드 이름 및 다른 매개변수 목록으로 메서드를 중복 정의하는 기법

class A
{
    public void show()
    {
        Console.WriteLine("A");
    }
    public void show(int num)
    {
        Console.WriteLine(num);
    }
    public void show(string str)
    {
        Console.WriteLine(str);
    }
}

 

4. 확장 메서드

확장 메서드

= 기존 클래스의 메서드를 확장하는 기법 ( 코드 재사용성, 유지 보수성 ↑ )

= 외부 클래스에서 기존 클래스의 메서드처럼 사용할 수 있는 새로운 메서드를 만드는 기법

public static class ExtensionMethod
{
    public static int CountTarget(this string str, char ch)
    {
        int ret = 0;

        foreach (char c in str)
        {
            if (c == ch)
            {
                ret++;
            }
        }

        return ret;
    }
}

class Program
{
    static void Main(string[] args)
    {
        string str = "hello world";
        Console.WriteLine(str.CountTarget('l'));
        // 3
    }
}

 

this 바로 뒤에 확장하려는 클래스를 넣고, 원하는 매개변수를 넣으면 된다.

 

string 처럼 기존에 존재하는 클래스에서 손쉽게 새로운 메서드를 만들 수 있다.

'CS > C#' 카테고리의 다른 글

[ C# ] 상속, 인터페이스, 추상 클래스  (1) 2024.11.05
[ C# ] 값 형식, 참조 형식  (0) 2024.09.26
[ C# ] Callback, Delegate, Event  (0) 2024.08.09
[ C# ] 객체와 한정자  (0) 2024.07.26