디자인패턴 기반으로 알아보는 SOLID - (2)
·
CS
ISP:  Interface Segregation Principle한 줄 요약 - 인터페이스도 작게 쪼개자1. What 인터페이스 분리?객체는 자신이 사용하는 기능(메서드)에만 의존해야 한다는 원칙이다.다른 말로, 인터페이스는 그 인터페이스를 사용하는 클라이언트(객체)를 기준으로 분리해야 한다.2. Why 중요한 이유?클래스(인터페이스)가 소유하고 있는 책임의 크기를 줄일 수 있고 이를 통해 관심사의 분리라는 이점과 확장성에 용이함을 얻을 수 있기 때문에 중요하다.위 사진을 보면 우리는 이동수단 객체들의 AutoPilot 기능을 컨트롤 하기 위해서 IAutoPilot 인터페이스를 정의하였고 left, right, backward, forward 메서드를 선언 하였다.Car 클래스가 IAutoPilot를 ..
디자인패턴 기반으로 알아보는 SOLID
·
CS
SRP : Single Responsibility Principle한 줄 요약 - 객체를 변경시키는 요인은 무조건 Only 1  하나뿐이어야 한다.1. What 책임이란 무엇일까 ?책임이란, 객체에 의해 정의되는 응집도(행동과 관련된 상태를 한 클래스에 모아 놓는 것) 있는 행위의 집합으로, 객체가 유지해야 하는 정보(상태)와 수행할 수 있는 행동(메서드)에 대해 추상적으로 서술한 문장이다.그래서 책임과 기능의 크기는 다르다. 책임은 객체가 수행할 수 있는 행동을 종합적이고 간략하게 서술하기 때문에 기능 보다 추상적이고 개념적으로 더 크다.2. Why 왜 중요할까 ?고객의 편의성을 증대 시키기 위해서 “커피 주문 시스템”를 개발하기로 했다고 하자.최초 설계 단계에서  1)주문 받기, 2)커피 제조하기, ..
컴퓨터특강 2주차 : OOP
·
CS
기존에 우리가 알던 지식을 기반으로 좀 더 객체지향스럽게 설계 및 개발하는 방법론에 대해서 알아보는 챕터였다.소프트웨어 모듈이 가져야 할 3가지 기능필요한 기능이 오류 없이 제대로 동작하는 것.변경에 용이한 코드.누구 읽어도 이해하기 쉬운 코드; 동작이 우리의 상식(?) 또는 예상에서 크게 벗어나지 않는 코드 절차지향과 객체지향데이터와 프로세스 역할을 분리해서 프로그래밍 하는 방식을 절차지향 프로그래밍이라고 부른다.프로세스는 데이터의 의존하고 있기 때문에 데이터의 변경은 단순히 데이터만 변경하는 것이 아니라 프로세스까지 변경을 해야한다. 즉, 데이터의 변경으로 인한 영향을 지역적으로 고립시키기 어렵다는 것이다. 그렇다면 어떻게 해야 변경하기 쉬운 설계를 할 수 있을까?" 변경하기 쉬운 설계는 한번에 하나..
컴퓨터특강 1주차 : Clean Code
·
CS
우리는 평균적으로 코드를 작성하는 시간보다 코드를 읽고 해석하는데 많은 시간을 소비한다. 하물며, 자신이 직접 짠 코드에도 많은 분석시간이 필요하다. 그렇기 때문에 우리는 미래의 나를 믿지 말고 미래의 나도 쉽게 이해 시킬 수 있는 깨끗한 코드를 작성해야 한다. 그렇다면 깨끗한 코드는 무엇일까? 바로 "읽기가 쉬운 코드" 이다. 의미 있는 이름소프트웨어에서 이름은 어디서나 쓰인다. 하지만 주의 깊게 이름을 붙이지 않는다.우리는 변수에도 이름을 붙이고, 함수에도 이름을 붙이고, 인수, 클래스 그리고 패키지명에도 이름을 붙인다. 소스 파일을 저장하는 디렉토리에도 이름을 붙인다. 이렇듯 이름을 많이 사용하므로 잘 지으면 편하다. 그렇다면 어떻게 이름을 지어야 잘 지은 이름일까? 첫 번째 규칙 : 의도를 분명히..
[가상면접 사례로 배우는 대규모 시스템 설계 기초]사용자 수에 따른 규모 확장성사용자 수에 따른 규모 확장성
·
CS
해당 챕터에서는 사용자 수가 증가함에 따라 시스템의 규모를 확장해 나가는 과정을 공부했다. 명확하게 내용을 이해하기 어려웠지만, 규모 확장과 안정적인 시스템을 설계하는데 쓰일 유용한 지식들을 배운다는 생각으로 학습했다. 웹 계층과 데이터 계층에 대한 이해단일서버모든 컴포넌트가 단 한대의 서버에서 실행되는 간단한 시스템웹, 앱, 데이터베이스, 캐시 등이 전부 한 서버에 실행된다.보통 요청은 두 가지 종류의 단말(웹 어플리케이션, 모바일 앱)로 부터 온다.사용자의 요청 처리 흐름은 다음과 같다.DNS 서버의 Domain address에 대한 Ip address를 요청한다.DNS에서 Ip address를 반환 받는다.해당 Ip address를 통해서 웹서버에 HTTP 요청을 보낸다.웹 페이지나 JSON 형태의..