본문 바로가기

소프트웨어

(30)
[소프트웨어/디자인패턴] 스트레티지 패턴(Strategy Pattern) 스트레티지 패턴은 OCP를 지킬 수 있도록 도와준다. Context 만약에 Robot이란 추상클래스가 있고 Atom과 Marin이 이 추상클래스를 상속받아 각각의 공격방법과 이동 방법을 구현한다. 여기까지는 객체지향적인 설계라고 할 수 있는데, 자 그럼 이제부터 Atom과 Marin을 업그레이드 시켜보자. Problem 기능 확장의 문제점 Atom은 기존엔 걸을 수 밖에 없었다. 하지만 연구원들이 열심히 노력해서 걷기보다는 날 수 있도록 만들었다. 그렇다면 코드상 아래와 같아진다. class Atom extends Robot{ // written something.. void move() { // 이전코드 // System.out.println("I'm walking!"); // 수정코드 System.o..
[소프트웨어/팁] 좋은 글귀 모음 [Why I studied full-time for 8 months for a Google interview] https://www.vobour.com/book/view/fiRGQMcmRkaw7pgpL [사다리는 생각하지 마] http://blog.gorekun.com/?p=1554
[소프트웨어/SOLID] 의존 역전 원칙(DIP) DIP (Dependency Inversion Principle) 자주 변화하는 것보다 변화하기 어려운 것, 변화가 거의 없는 것에 의존하라는 것 다른 모듈이나 클래스에 도움을 받을 때는 무조건 의존하지 말고 나름대로의 원칙을 가지고 도움을 받아야 효과적으로 받을 수 있다는 뜻이다. 예를 들어서 사람은 이름이나, 성별, 나이 등은 그 자체의 속성으로써 변하기 어렵지만, 상대적으로 자동차, 핸드폰, 옷등은 자주 교체될 수 있다. 이는 이전의 UML에서의 합성관계냐 집약관계냐에 따른 차이와 비슷하다. 변하기 쉬운 것의 변하기 어려운 부분들을 추상화하여 인터페이스나 추상클래스로 참조함으로써 DIP를 지킬 수 있게된다. 예를 들어서 핸드폰의 경우 핸드폰의 전화를 하거나, 문자를 보내거나, 앱을 실행하는 것 자체..
[소프트웨어/SOLID] 인터페이스 분할 법칙(ISP) ISP(Interface Segregation Principle) 인터페이스를 클라이언트에 특화되도록 분리하자 만약 2개 이상의 많은 책임을 가지는 복합기를 클래스로 추상화한다고 하자. 복합기 프린트 복사 팩스 복합기는 위와 같은 3개의 기능을 모두 가지고있다. 각각의 책임은 별도의 클래스로 나올 수 있지만 복합기의 측면에서 봤을 때에는 어쨋거나 SRP원칙을 만족한다. 하지만 다양한 클라이언트에서는 복합기의 일부분만 필요하다. 프린트 클라이언트는 프린트 기능만, 복사 클라이언트는 복사 기능만, 팩스 클라이언트는 팩스 기능만을 필요로 한다. 이 세 클라이언트가 복합기를 직접 참조하고 있는 경우 복합기의 기능이 추가되거나 변경되었을 때 영향을 받을 가능성이 있다. 따라서 복합기의 각각의 기능을 인터페이스화 ..
[소프트웨어/SOLID] 리스코브 치환 법칙(LSP) LSP(Liskov-Substitution Principle) 자식클래스는 부모 클래스에서 가능한 행위를 모두 수행할 수 있어야한다. 위의 정의는 자식클래스가 부모클래스를 대체할 수도 있어야 하고 일반화 관계를 의미한다. 일반화 관계는 is a kind of관계이다. 원숭이와 포유류는 is a kind of관계가 맞다. 포유류는 아래와 같은 조건을 만족해야한다. 알을 낳지 않고 새끼를 낳을 것 젖을 먹여 새끼를 키우고 폐를 통해 호흡할 것 체온이 일정한 정온 동물이며 털이나 두꺼운 피부로 덮혀 있을 것 원숭이는 위와 같은 원칙을 모두 만족하지만 오리너구리는 알을 낳아 번식하는 동물이므로 만족하지 않는다. 따라서 오리구리는 포유류에 만족하지 않아, LSP에 위배된다. public class Bag { pr..
[소프트웨어/SOLID] 개방 폐쇄 원칙(OCP) OCP(open-close principle) 변경에 대해선 닫혀있고 확장에 대해선 열려있다. 요구사항 변경에 따른 관점 개방 폐쇄 원칙은 변경에 대해선 닫혀있고 확장에 대해선 열려있다는 말인데, 의외로 명확한 의미이다. 클라이언트가 성적표, 출석부클래스에 의존하고 있다고 가정하고 변경사항으로 클라이언트가 유저의 도서관 대여 명부또한 보고 싶다고 한다. 이 경우 기존의 설계로는 클라이언트에 도서관 대여 명부을 의존하는 메서드를 만들어야 하는데, 이는 기존코드를 변경을 해야하므로 OCP원칙에 위배된다. 이 경우 출력매체에 대해서 인터페이스를 만들고 클라이언트가 이 출력매체인터페이스를 의존하게 한다면 도서관 대여 명부라는 새로운 기능이 확장되더라도 클라이언트의 코드에는 수정이 없다. (의존성의 주입은 외부에..
[소프트웨어/SOLID] 단일 책임 원칙(SRP) SRP(Single Responsibility Principle) 단일 책임 원칙 책임의 의미 해야하는 것 할 수 있는 것 해야하는 것을 잘 할 수 있는 것 예를들어서 UserDAO에서 Post인스턴스를 Create하거나 Update하는 쿼리를 가지고 있다면 그것은 위의 SRP 위반이라고 할 수 있다. 한 클래스에서 많은 책임을 가지고 있다면, 각 메서드나 속성간의 의존성이 심해질 수 있다. 변경 책임 => 변경의 의유 보통 시스템의 변경은 요구 사항의 변경에 의하여 발생한다, 소프트웨어에서의 변경은 당연하므로 이에 대한 영향을 최소화하는 것이 좋은 설계라고 할 수 있다. 해당 클래스가 많은 책임을 가지고 있으면 요구 사항마다 변경해야 하는 요소가 늘어날 수 있다. 따라서 책임을 분리하여 변경을 최소화해..
[소프트웨어] 객체지향의 기본원리 정리 OOP 객체 지향 프로그래밍(Object Oriented Programming), 객체라는 기본단위로 나누고 객체의 상호작용을 서술하는 방식, 쉽게 현실 세계를 프로그램 언어로 서술한 것 추상화 어떤 영역에서 필요로하는 하는 속성이나 행동을 추출하는 작업 여러 개체들의 집합을 클래스라고 부름 (일반화하다) 캡슐화 정보 은닉 알 필요가 없는 정보에 대해서 외부에서 접근하지 못하도록 제한하는 것 내부 속성의 타입이나 로직이 변경되었다고 해서, 메서드의 반환 타입을 기존과 같이 유지한다면 참조하고 있는 다른 코드를 변경할 필요가 없음 변경이 필요하다면, 추 후에 deprecated 등의 신택스를 사용해 서서히 옳바른 코드로 변경해나가면 됨 일반화 관계 정보, 기능의 재사용도 가능함 (슈퍼클래스의 메서드를 오버..