본문 바로가기

전체 글27

11. Dependency Inversion Principle 유연성이 극대화된 시스템이란 : 의존성이 추상abstraction이 아닌 구체concretion에 의존하지 않는 세스템이다. String은 구현체이지만 변동이 생길 가능성이 낮으므로 넘어가자 use나 import 문에서 구현체말고 되도록 인터페이스를 참조하도록 하자. 안정된 추상화인터페이스는 구현체보다 변동성이 낮다. 안정된 소프트웨어란 변동성이 큰 구현체에 의존하는 일은 지양하고 안정된 추상 인터페이스를 선호하는 아키텍쳐다. 변동성이 큰 구체 클래스를 참조하지 마라. : 대신 추상 인터페이스를 참조해라 변동성이 큰 구체 클래스로부터 파생하지 마라. : 상속하지 말라는 뜻인 듯 왜...? 구체 함수를 오버라이드 하지 마라. : 대체로 구체함수는 소스코드 의존성을 필요로한다. 따라서 오버라이드하면 의존성을.. 2021. 3. 5.
10. Interface Segregation Principle OPS클래스를 다수의 사용자가 사용한다고 가정해보자. user1은 op1을 2는 op2를 3은 op3을 사용한다. OPS +op1 +op2 +op3 user1은 op2와 op3을 사용하지 않아도 소스코드는 같은 클래스에 존재하고 결국 의존하게 된다. 심지어는 op2가 바뀌면 op1도 강제로 배포된다. 오퍼레이션을 인터페이스단위로 분리하여 해결할 수 있다. 이때 오퍼레이션마다 메소드가 하나씩 포함된 인터페이스를 작성하면 어떨까. 굳이 만들지 않아도 되는 2개의 메소드를 노출하지 읺아도 된다. 그리고 마지막에 3개의 작은 인터페이(role interface)를 모아서 OPS를 만들면 개이덕 ISP와 언어정적타입 언어는 import use같은 included문이 팔요하다 동적타입 안어는 included문이 필.. 2021. 3. 4.
1장 HTTP 개관 웹 클라이언트와 서버 클라이언트는 서버에서 HTTP요청을 보내고 서버는 요청된 데이터를 HTTP응답으로 돌려준다. HTTP 클라이언트와 HTTP 서버는 월드와이드웹(WWW)의 기본요소다. http://tistory.com/123.html 을 요청한다고 해보자. 브라우저는 tistory.com으로 요청을 보내고 서버는 123.html을 찾고 성공했다면 성공한 결과를 리턴한다. 리소스 정적 파일 : 텍스트, html, 워드, jpg 등 하지만 리소스는 반드시 정적일 필요 없다. 동적 콘텐츠 리소스는 사용자가 누구인지, 어떤 정보를 요청했는지 등에 따라 다른 콘텐츠를 생성한다. 미디어 타입 MIME(Multipurpose Internet Mail Extensions) : 원래는 각기 다른 전자메일 시스템 사이.. 2021. 3. 3.
9. Liskov Substitution Principle SubtypeS타입의 객체 o1 각각에 대응하는 T타입 객체 o2가 있고 T타입을 이용해서 정의한 모든 프로그램 P에서 o2자리에 o1을 치환하더라도 P의 행위가 변하지 않는다면 S는 T의 하위타입이다. 상속을 사용하도록 가이드하기같은 인터페이스로 정의된 객체 2개가 있을 때 호출하는 쪽에서 무엇을 사용하는지 의존하지 않는다. 정사각형/직사각형 문제Square는 Rectangle의 하위타입으로는 적합하지 않은데, Rectangle은 높이와 너비는 서로 독립적으로 변경될 수 있는 반면 Square는 함께 변경되기 때문. 2021. 2. 16.