본문 바로가기

분류 전체보기

(143)
[소프트웨어/팁] 좋은 글귀 모음 [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 위반이라고 할 수 있다. 한 클래스에서 많은 책임을 가지고 있다면, 각 메서드나 속성간의 의존성이 심해질 수 있다. 변경 책임 => 변경의 의유 보통 시스템의 변경은 요구 사항의 변경에 의하여 발생한다, 소프트웨어에서의 변경은 당연하므로 이에 대한 영향을 최소화하는 것이 좋은 설계라고 할 수 있다. 해당 클래스가 많은 책임을 가지고 있으면 요구 사항마다 변경해야 하는 요소가 늘어날 수 있다. 따라서 책임을 분리하여 변경을 최소화해..
[OS:Concepts] 컴퓨터 시스템의 구조 Structure of computer 컴퓨터의 연산 현대의 컴퓨터 공유메모리에 접근을 제공하는 공통 버스에 의해 연결된 여러개의 장치들과 하나 이상의 CPU의 집합 장치 제어기는 특정 장치를 관리 함 CPU와 장치 제어기가 메모리 사이클을 얻기위해 병렬 수행되며 제어 및 동기화를 위해 메모리 제어기가 제공됨 컴퓨터의 구동 구동을 위한 초기 프로그램(bootstrap program)을 가지고 있음 보통 펌웨어, 바이오스라고 칭함 EEPROM에 저장됨 CPU레지스터로부터 장치 제어기, 메모리 내용등 모든 것을 초기화 운영체제의 적재 및 수행 방법을 알고 있음 커널이 적재되고 실행되면 사용자에게 서비스를 제공할 수 있음 일부 서비스는 시스템 프로그램으로 커널이 수행되는 동안 계속 수행되는 시스템 프로세스, ..
[OS:Concepts] 운영체제가 할 일 What operating system do 컴퓨터의 구성요소 하드웨어 : CPU, 메모리, IO 장치 운영체제 응용 프로그램간의 하드웨어 사용 제어&조정 다른 프로그램이 유용한 작업을 할 수 있는 환경을 제공 응용프로그램 : 워드 프로세서, 스프레드 시트, 컴파일러 등.. 사용자 사용자 관점 일반적인 PC : 한 사용자의 사용 용이성을 위해 설계된다, 자원의 이용에는 전혀 신경쓰지 않는다. 대형 컴퓨터, 미니 컴퓨터 : 다양한 사용자가 사용하며 자원의 이용을 극대화 하도록 설계됨 워크스테이션, 서버 : 개인 사용 용이성과 자원 용이성을 적절히 조화를 이루도록 되어있음 시스템 관점 자원 할당자(resource allocator) : 하드웨어 자원관리 제어 프로그램(control program) : 부적절..