Software Develop/개발이론 5

SOLID원칙 - ISP(Interface Segregation Principle)

ISP(Interface Segregation Principle)이란? 특정 클라이언트가 자신이 이용하지 않는 메서드 등의 멤버에 의존하면 안된다. ISP(Interface Segregation Principle)은 직역하면 인터페이스 분리 원칙이다. 다시 말하자면 특정 객체가 특정 인터페이스를 상속받아 구현할 때 불필요한 메서드나 멤버가 있으면 안된다는 원칙이다. 스마트폰에 빗대서 설명해보자. 아래에 SmartPhone의 기능을 정의한 인터페이스가 있다. 스마트폰처럼 음악을 재생시킬 수 있고 메세지, 전화 기능도 구현되어 있으며 검색 기능까지 구현되어 있다. public interface ISmartPhone { void PlayMusic(); void SendMessage(); void Call();..

SOLID원칙 - LSP (Liskov Substitution Principle)

LSP(Liskov Substitution Principle)이란? 상위 타입의 객체를 하위 타입의 객체로 치환하여 사용하여도 프로그램은 정상적으로 동작해야 한다. LSP(Liskov Substitution Principle)은 상속이 이루어진 클래스간에 상위 타입에 하위 타입의 객체를 치환하여 사용할 때에도 프로그램의 안정성이 보장되어야 한다는 것을 뜻한다. 객체지향 프로그래밍을 해왔던 개발자에겐 너무도 당연하게 스며들어 있는 개념이다 예시 클래스 상속 구조 아래와 같이 Person, ChildA, ChildB를 정의한다. ChildA와 ChildB는 Person을 상속받고 Person의 GetName 함수를 Override하고 있다. public class Parent { public virtual ..

SOLID원칙 - SRP (Single Responsibility Principle)

SRP(Single Responsibility Principle)이란? 클래스는 하나의 책임만 가져야 한다. SRP(Single Responsibility Principle)은 하나의 객체가 하나의 책임만을 가져야한다는 원칙이다. 아주 간단하고 명료한 명제이지만 소프트웨어 개발에 있어서 "책임"이라는 단어의 범주는 한 마디로 표현하기가 어렵다. 그래도 굳이 한 마디로 표현하자면 논리적으로 설계된 하나의 기능이라고 볼 수 있다. 다만 여기서 말하는 기능의 기준은 클래스가 정의한 메서드나 상속 구조, 사용자의 수를 말하는 것은 아니다. 예를 들어보자. 누군가 당신에게 뉴스 웹 페이지에서 기사 내용을 가져와 프로그램에 나타내는 소프트웨어 개발을 요청했다고 하자. 당신은 웹페이지 주소에서 뉴스 내용을 가져오는 ..

SOLID원칙 - OCP (Open Closed Principle)

OCP(Open Closed Principle)이란? 객체는 확장에 대해 열려있어야 하고 수정에 대해서는 닫혀 있어야 한다. 위의 말처럼 소프트웨어는 기존 코드의 수정없이 새로운 기능이 추가될 수 있도록 설계되어야 한다. 다시 말해서 이미 개발된 클래스를 다른 클래스나 모듈에서 사용하고 있을 때, 기능 추가의 작업이 수행된다면 사용하는 부분에서의 코드 수정은 없어야 한다라는 말이다. 예시 아래의 예시를 살펴보자. MoviePlayer라는 객체가 있다고 하자. MoviePlayer는 "IronMan"이라는 영화를 입력받아서 재생시키는 기능을 구현하고 있다. public class MoviePlayer { public void Play(IronMan ironMan) { ironMan.Play(); } } p..

의존성 주입 (Dependency Injection)

의존성 주입(Dependency Injection)이란? 의존성 주입(Dependency Injection)은 객체에 또 다른 객체에 대한 의존성을 부여하는 것을 말한다 설명 의존성 그렇다면, 의존성은 무엇일까? 아래 코드를 살펴보자. Job class public class Job { public string JobName { get; set; } } Person class public class Person { public string Name { get; set; } public int Age { get; set; } public Job Job { get; set; } } 위 코드를 보면 Job과 Person 클래스가 정의되어 있다. Job 클래스의 경우는 직업 이름을 프로퍼티로 가지고 있고, Pe..