본문 바로가기

전체 글81

[소프트웨어공학] 객체지향의 6가지 관계 유형 목차 참고 https://blog.visual-paradigm.com/what-are-the-six-types-of-relationships-in-uml-class-diagrams/ 1. 클래스 다이어그램에서의 관계 형태 2. 각 관계 연관 (Association)설명: 대표적인 유형, 클래스 간 일반적인 연결을 나타냄, 단방향 양방향 모두 가능예시: 학생 usesA 교수님, 교수님 hasA 학생표현: usesA / hasA 상속 (Inheritance)설명: 하위 클래스가 상위 클래스의 모든 속성과 메서드를 상속받는 관계.예시: 버스 isA 차량, 택시 isA 차량표현: isA 실현/구현 (Realization/Implementation)설명: 클래스는 해당 인터페이스의 모든 추상 메서드를 구현해야 한.. 2024. 3. 29.
[소프트웨어공학] SOLID: 객체지향 프로그래밍의 5가지 원칙 목차 SOLID? SOLID 원칙은 객체 지향 프로그래밍과 소프트웨어 설계에서 코드의 유지보수성, 확장성, 그리고 유연성을 높이기 위한 다섯 가지 기본 원칙을 의미한다. 이 원칙들은 단일 책임 원칙(SRP), 개방-폐쇄 원칙(OCP), 리스코프 치환 원칙(LSP), 인터페이스 분리 원칙(ISP), 그리고 의존성 역전 원칙(DIP)을 포함한다. SOLID 원칙을 따름으로써 소프트웨어는 더욱 견고하고, 유지보수하기 쉬우며, 확장성 있는 구조를 갖출 수 있다. 문자 약어 개념 S SRP 단일 책임 원칙 (Single responsibility principle) “한 클래스는 하나의 책임만 가져야 한다.” O OCP 개방-폐쇄 원칙 (Open/closed principle) “소프트웨어 요소는 확장에는 열려 .. 2024. 3. 29.
[소프트웨어공학] SOLID(5) : 의존성 역전 원칙(Dependency Inversion Principle, DIP) 목차 의존성 역전 원칙(Dependency Inversion Principle, DIP) SOLID 원칙 중 'D'는 의존성 역전 원칙(Dependency Inversion Principle, DIP)을 의미한다. 이 원칙은 두 가지 핵심 내용을 갖고 있다: 고수준 모듈은 저수준 모듈에 의존해서는 안 되며, 둘 다 추상화에 의존해야 한다. 추상화는 구체적인 사항에 의존해서는 안 되며, 구체적인 사항은 추상화에 의존해야 한다. 이 원칙은 소프트웨어의 결합도를 낮추고, 유연성 및 재사용성을 높이기 위해 사용된다. 게임을 주제로 한 C# 예시를 통해 의존성 역전 원칙을 지키지 않은 코드와 지킨 코드를 비교해보자. DIP을 지키지 않은 코드 예시 public class Player { private Sword .. 2024. 3. 29.
[소프트웨어공학] SOLID(4) : 인터페이스 분리 원칙(Interface Segregation Principle, ISP) 목차 인터페이스 분리 원칙(Interface Segregation Principle, ISP) SOLID 원칙 중 'I'는 인터페이스 분리 원칙(Interface Segregation Principle, ISP)을 의미한다. 이 원칙은 "클라이언트는 자신이 이용하지 않는 메서드에 의존하면 안 된다"는 개념을 담고 있다. 즉, 한 클래스가 자신이 사용하지 않는 인터페이스를 구현하도록 강제되어서는 안 된다는 것이다. 이 원칙은 인터페이스를 더 작고 구체적인 단위로 분리함으로써, 구현 클래스가 자신과 무관한 메서드를 구현하게 하는 것을 방지한다. 게임 개발을 예로 들 때, 이 원칙을 지키지 않은 코드와 이를 지킨 코드로 비교해보자. ISP를 지키지 않은 코드 예시 게임에 다양한 종류의 캐릭터가 있고, 각 캐릭.. 2024. 3. 29.
[소프트웨어공학] SOLID(3) : 리스코프 치환 원칙(Liskov Substitution Principle, LSP) 목차 리스코프 치환 원칙(Liskov Substitution Principle, LSP) SOLID 원칙 중 L은 Liskov 치환 원칙(Liskov Substitution Principle, LSP)을 의미한다. 이 원칙은 하위 타입은 항상 그들의 기반 타입으로 대체될 수 있어야 한다고 말한다. 즉, 클래스의 인스턴스를 해당 클래스의 부모 타입의 인스턴스로 대체해도 프로그램의 정확성에 영향을 미치지 않아야 한다는 것이다. 이 원칙을 지키면 코드의 재사용성과 유지보수성이 높아진다. LSP를 지키지 않은 코드 예제와 이를 수정하여 LSP를 지키는 코드 예제를 게임을 주제로 작성해 보겠다. LSP를 지키지 않은 코드 예제 이 예제에서는 게임 캐릭터와 이를 상속받는 특수 캐릭터 클래스를 다룬다. 특수 캐릭터는.. 2024. 3. 29.
[소프트웨어공학] SOLID(2) : 개방 폐쇄 원칙 (Open-Closed Principle, OCP) 목차 개방 폐쇄 원칙 (Open-Closed Principle, OCP) SOLID 원칙 중 "O"는 "개방-폐쇄 원칙(Open-Closed Principle, OCP)"을 의미한다. 이 원칙은 "소프트웨어 엔티티(클래스, 모듈, 함수 등)는 확장에는 열려 있어야 하고, 수정에는 닫혀 있어야 한다"는 것을 말한다. 즉, 기존의 코드를 변경하지 않으면서도, 시스템의 기능을 확장할 수 있어야 한다는 뜻이다. 게임을 주제로 한 C# 예시를 들어, 이 원칙을 지키지 않은 코드와 지킨 코드를 비교해보겠다. OCP를 지키지 않은 코드 예시 이 예시에서는 게임 내의 다양한 종류의 몬스터를 처리하는 방식을 구현한다. 이 경우, 새로운 몬스터 종류가 추가될 때마다 MonsterHandler 클래스를 수정해야 한다. us.. 2024. 3. 29.
[소프트웨어공학] SOLID(1) : 단일 책임 원칙 (Single Responsibility Principle, SRP) 목차 단일 책임 원칙 (Single Responsibility Principle) SOLID 원칙 중 'S'는 'Single Responsibility Principle (단일 책임 원칙)'를 의미한다. 이 원칙에 따르면, 클래스는 하나의 책임만 가져야 한다는 것이다. 여기서 '책임'이란 변경을 위한 이유를 의미한다. 즉, 하나의 클래스는 하나의 기능만 수행하는 데 집중해야 한다는 원칙이다. 이렇게 함으로써 코드의 유지보수성이 향상되고, 클래스 간의 의존성이 줄어들어 시스템이 더 유연해진다. SRP를 지키지 않은 코드 예시 게임 개발에 있어서 'S'를 지키지 않은 코드 예시는 게임 캐릭터의 속성 관리와 게임 로그를 한 클래스 내에서 관리하는 경우이다. 이런 설계는 단일 책임 원칙을 위반하는 것이다. us.. 2024. 3. 29.
[디자인패턴] 행위 패턴(12) : 방문자(Visitor) 목차 방문자(Visitor) 방문자 패턴(Visitor Pattern)은 객체의 구조를 변경하지 않고도 객체에 새로운 연산을 쉽게 추가할 수 있도록 하는 디자인 패턴이다. 이 패턴은 주로 데이터 구조 내의 각 요소에 대해 수행될 연산을 객체 구조에서 분리하여, 새로운 연산을 추가할 때 기존 구조를 수정하지 않아도 되게 만든다. "방문자"라는 용어는 패턴의 구성 요소 중 하나인 'Visitor' 객체가 데이터 구조의 각 요소를 "방문"하여 특정 작업을 수행한다는 개념에서 유래한다. 패턴 미적용 예시 게임 개발 시나리오에서 플레이어가 아이템을 습득하거나 특정 지역에 진입하는 등의 이벤트를 처리하는 코드를 먼저 살펴보자. 방문자 패턴을 적용하지 않고, 이벤트를 처리하는 간단한 구조를 구현해본다. using S.. 2024. 3. 25.
[디자인패턴] 행위 패턴(11) : 템플릿 메소드(Template Method) 목차 템플릿 메소드(Template Method) 템플릿 메소드 패턴은 디자인 패턴의 일종으로, 알고리즘의 구조를 메소드에 정의하고, 알고리즘의 일부 단계를 서브클래스에서 구현할 수 있도록 하여 전체 알고리즘의 구조를 변경하지 않고도 특정 단계를 재정의할 수 있도록 한다. 이 패턴의 이름은 "템플릿"이라는 단어에서 유래했다. 템플릿은 일종의 틀을 의미하는데, 템플릿 메소드 패턴에서는 알고리즘의 틀(구조)을 정의하고, 그 틀 안에서 일부 내용을 변경할 수 있도록 한다는 개념에서 비롯되었다. 단순히 추상 클래스라는 문법적인 틀의 목적과 가장 유사하다고 볼 수 있는 개념이다. 패턴 미적용 예시 먼저, 템플릿 메소드 패턴을 적용하지 않은 상황에서의 코드를 살펴보자. 이 예시에서는 간단한 게임 프로그램을 만드는 .. 2024. 3. 25.