티스토리 뷰

CS

OOP언어의 특징, SOILD원칙

Game Client Lee Hwanguk 2023. 7. 12. 23:51

# OOP언어?

- 객체 지향 프로그래밍 (Object-Oriented Programming)을 뜻함. 소프트웨어 개발 패러다임 중 하나로 

프로그램을 독립적인 객체들의 집합으로 구성하는 개념이다. OOP는 객체들 간의 상호작용과 협력을 중심으로 프로그램을 설계하고 구현함. 코드의 재사용성과 유지보수성을 향상시키며 큰 규모의 프로그램을 모듈화 하고 구조화하는데 도움을 줌. 

 

#OOP언어의 주요 특징들

 

1. 캡슐화 : 객체의 속성과 행위를 하나로 묶고, 외부에서 직접적인 접근을 제어하는 것을 의미. 정보 은닉을 통해 객체의 내부 구현을 숨기고, 외부에서는 객체의 공개된 인터페이스를 통해 상호작용할 수 있도록 함.

 

*C#에서의 예시 ex)

class Car
{
    private string model;
    private int year;

    public void SetModel(string model)
    {
        this.model = model;
    }

    public string GetModel()
    {
        return model;
    }

    public void SetYear(int year)
    {
        this.year = year;
    }

    public int GetYear()
    {
        return year;
    }
}

 

2. 상속 : 클래스간에 상속관계를 형성하여 기존 클래스의 속성과 행위를 재사용하고 확장 할 수 있음.

              업캐스팅 : 자식 클래스의 인스턴스를 부모 클래스의 참조 변수로 할당하는 것

              다운캐스팅 : 업캐스팅된 객체를 다시 원래의 자식 클래스의 참조 변수로 할당하는 것

 

*C#에서의 예시 ex)

class Animal
{
    public virtual void MakeSound()
    {
        Console.WriteLine("The animal makes a sound");
    }
}

class Dog : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("The dog barks");
    }

    public void Fetch()
    {
        Console.WriteLine("The dog fetches a ball");
    }
}

*업캐스팅과 다운캐스팅

Animal animal = new Dog();  // 업캐스팅
animal.MakeSound();  // 출력: "The dog barks"

Dog dog = (Dog)animal;  // 다운캐스팅
dog.Fetch();  // 출력: "The dog fetches a ball"

3. 다형성 : 동일한 이름의 메서드나 속성을 서로 다른 방식으로 구현하여 객체의 타입에 따라 다른 동작을 수행할 수 있는 개념(override) 

 

*C#에서의 예시 ex)

class Shape
{
    public virtual void Draw()
    {
        Console.WriteLine("Drawing a shape");
    }
}

class Circle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Drawing a circle");
    }
}

class Square : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Drawing a square");
    }
}
Shape[] shapes = new Shape[3];
shapes[0] = new Circle();
shapes[1] = new Square();
shapes[2] = new Shape();

foreach (Shape shape in shapes)
{
    shape.Draw();
}
Drawing a circle
Drawing a square
Drawing a shape

4. 추상화 : 복잡한 시스템이나 개념을 단순화하여 핵심적인 부분에 집중할 수 있도록 하는 과정.

추상화는 객체의 공통된 특징을 추출하여 클래스로 정의하고 객체 간의 관계를 모델링하는데 사용됨.

(interface, abstract)

 

*C#에서의 예시 ex)

abstract class Animal
{
    public abstract void MakeSound();

    public void Sleep()
    {
        Console.WriteLine("The animal is sleeping");
    }
}

interface IJumpable
{
    void Jump();
}

class Dog : Animal, IJumpable
{
    public override void MakeSound()
    {
        Console.WriteLine("The dog barks");
    }

    public void Jump()
    {
        Console.WriteLine("The dog jumps");
    }
}

5. 객체 지향 설계 원칙(SOILD) : 객체지향 프로그래밍(OOP)에서 유지보수 가능하고 확장 가능한 소프트웨어를 설계하기 위한 다섯 가지 원칙을 의미. 소프트웨어의 설계와 구조를 개선하여 유연하고 재사용 가능한 코드를 작성할 수 있음.

 

* 단일 책임 원칙(Single Responsibillity Principle,SRP) : 하나의 클래스는 하나의 책임을 가져야함.

클래스는 변경의 이유가 하나여야 하며 한가지 기능에 집중해야함. 클래스를 작고 응집력 있는 단위로 유지하여 코드의 가독성과 유지 보수성을 향상시킴

 

*개방-폐쇄 원칙(Open-Closed Principle, OCP) : 소프트웨어 개체(클래스, 모듈, 함수 등)는 확장에는 열려있어야 하고,

수정에는 닫혀 있어야함. 기존 코드를 변경하지 않고도 새로운 동작을 추가할 수 있도록 설계해야함. 추상화, 상속, 인터페이스 등을 활용하여 코드의 재사용성과 확장성을 높이는데에 중점을 둠.

 

*리스코프 치환 원칙(Liskov Substitution Principle, LSP) : 상속 관계에 있는 클래스들은 자식 클래스는 언제나 부모 클래스의 역할을 대체할 수 있어야 함. 이는 자식 클래스가 부모 클래스의 기능을 완전히 유지하면서 추가적인 동작을 제공해야 함을 의미. 이를 통해 다형성을 지원하고 일관성 있는 인터페이스를 제공하여 코드의 유연성을 높임.

 

*인터페이스 분리 원칙 (Interface Segregation Principle, ISP) : 클라이언트는 자신이 사용하지 않는 인터페이스에 의존하도록 강요받지 않아야 함. 즉, 인터페이스를 클라이언트에 특화된 작은 단위로 분리하여 해당 클라이언트가 필요로 하는 기능에만 의존하도록 설계함. 이를 통해 인터페이스의 명확성과 응집력을 높이며, 결합도를 낮출 수 있음.

 

*의존성 역전 원칙 (Dependency Inversion Principle, DIP) : 추상화된 것에 의존해야 하며, 구체적인 것에 의존하면 안됨. 즉, 의존성은 인터페이스나 추상 클래스와 같은 상위 수준의 모듈에 의존해야 하며, 구체적인 구현이나 하위 수준의 모듈에 의존하면 안됨. 이를 통해 모듈 간의 결합도를 낮추고, 유연하고 확장 가능한 구조를 유지할 수 있음.

'CS' 카테고리의 다른 글

데이터베이스  (0) 2023.06.29
CPU , 메모리  (0) 2023.06.28
운영체제  (0) 2023.06.28
프로세스와 스레드  (0) 2023.06.13
운영체제(운영체제의 역할과 구조, 컴퓨터의 요소)  (0) 2023.04.30
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함