Computer Science
LSP (리스코프 치환 원칙) 이해하기
리스코프 치환 원칙 - LSP (Liskov Substitution Principle) 리스코프 치환 원칙은 1988년 바바라 리스코프(Barbara Liskov)가 올바른 상속 관계의 특징을 정의하기 위해 발표한 것으로, 서브 타입은 언제나 기반 타입으로 교체할 수 있어야 한다는 것을 뜻한다. 교체할 수 있다는 말은, 자식 클래스는 최소한 자신의 부모 클래스에서 가능한 행위에 대한 수행이 보장되어야 한다는 의미이다. 즉, 부모 클래스의 인스턴스를 사용하는 위치에 자식 클래스의 인스턴스를 대신 사용했을 때 코드가 원래 의도대로 작동해야 한다는 의미이다. 이것을 부모 클래스와 자식 클래스 사이의 행위가 일관성이 있다고 말한다. 무슨 논문 같이 설명했지만, 그냥 우리가 지금까지 자바 프로그래밍을 하면서 질리..
OCP (개방 폐쇄 원칙) 이해하기
개방 폐쇄 원칙 - OCP (Open Closed Principle) 개방 폐쇄의 원칙(OCP)이란 기존의 코드를 변경하지 않으면서, 기능을 추가할 수 있도록 설계가 되어야 한다는 원칙을 말한다. 보통 OCP를 확장에 대해서는 개방적(open)이고, 수정에 대해서는 폐쇄적(closed)이어야 한다는 의미로 정의한다. 여기서 확장이란 새로운 기능이 추가됨을 의미한다. 따라서 해석하자면, 기능 추가 요청이 오면 클래스를 확장을 통해 손쉽게 구현하면서, 확장에 따른 클래스 수정은 최소화 하도록 프로그램을 작성해야 하는 설계 기법을 말한다고 보면 된다. ※ 참고 [ 확장에 열려있다 ] - 모듈의 확장성을 보장하는 것을 의미한다. - 새로운 변경 사항이 발생했을 때 유연하게 코드를 추가함으로써 애플리케이션의 기능..
SRP (단일 책임 원칙) 이해하기
단일 책임 원칙 - SRP (Single Responsibility Principle) 단일 책임 원칙(SRP)는 객체는 단 하나의 책임만 가져야 한다는 원칙을 말한다. 여기서 '책임' 이라는 의미는 하나의 '기능 담당'으로 보면 된다. 즉, 하나의 클래스는 하나의 기능만을 담당하여 하나의 책임을 수행하는데 집중되어야 있어야 한다는 의미이다. 실생활의 물체로 SRP 원칙을 이해해보자. 아래 그림과 같이 가위, 커터칼, 드라이버를 따로따로 사용하느냐, 하나의 다용도 공구로 합쳐 다재다능하게 사용하느냐에 따른 차이를 볼 수 있다. 어찌보면 다용도 공구가 공간의 절약도 있을테고 사용하기 좋을것 같지만, 사용이 아닌 코드를 설계하는 입장에서는 이는 단일 책임 원칙을 위반하는 모습이 되어 마이너스 적인 요소로 작..
[OOP] 객체지향 설계 원칙 SOLID
객체 지향 설계의 5원칙 S.O.L.I.D SOLID 원칙이란 객체지향 설계에서 지켜줘야 할 5개의 소프트웨어 개발 원칙( SRP, OCP, LSP, ISP, DIP )을 말한다 SRP(Single responsibility principle) : 단일 책임 원칙 OCP(Open-closed principle) : 개방-폐쇄 원칙 LSP(Liskov substitution principle) : 리스코프 치환 원칙 ISP(Interface segregation principle) : 인터페이스 분리 원칙 DIP(Dependency inversion principle) : 의존관계 역전 원칙 SOLID 설계 원칙은 oop의 4가지 특징(추상화, 상속, 다형성, 캡슐화)와 더불어, 객체 지향 프로그래밍의 단..
[OOP] 상속을 자제하고 합성(Composition)을 이용하라
상속과 합성 개념 정리 프로그래밍을 할때 가장 신경 써야 할 것 중 하나가 바로 코드 중복을 제거하여 재사용 함으로써 변경, 확장을 용이하게 만드는 것이다. 그런 관점에서 상속과 합성은 객체지향 프로그래밍에서 가장 널리 사용되는 코드 재사용 기법이다. 상속(Inheritance) 합성(Composition) 부모 클래스와 자식 클래스 사이의 의존성은 컴파일 타임에 해결 두 객체 사이의 의존성은 런타임에 해결 is-a 관계 has-a 관계 부모클래스의 구현에 의존 결합도가 높음. 구현에 의존하지 않음. 내부에 포함되는 객체의 구현이 아닌 인터페이스에 의존. 클래스 사이의 정적인 관계 객체 사이의 동적인 관계 부모 클래스 안에 구현된 코드 자체를 물려 받아 재사용 포함되는 객체의 퍼블릭 인터페이스를 재사용 ..
[OOP] 캡슐화 & 정보 은닉 개념
캡슐화 (Encapsulation) 캡슐화란 쉽게 말하면 변수나 메소드들을 캡슐로 감싸서 안보이게 하는 정보 은닉 개념중 하나이다. 우리가 먹는 알약을 생각해보자. 알약의 실제 약 내용은 가루약이지만, 이것을 캡슐로 감싸면서 맛을 은닉하여 사람이 먹기 편하게 하였으며, 또한 복잡한 재료들의 배합을 캡슐로 포장하여 다루기 편리하도록 하였다. 이처럼 캡슐화는 객체의 속성(Field)과 행위(Method)를 하나로 묶고, 외부로 부터 내부를 감싸 숨겨 은닉한다. 또한 외부의 잘못된 접근으로 값이 변하는 의도치 않는 동작을 방지하는 보호 효과도 누릴 수 있다. 자바에서는 대표적으로 protected , default , private의 접근제어자를 통해 구현이 가능하다. class Time { private i..
[OS] 연속 메모리 할당
단일 프로그래밍 환경에서 연속 할당 초기 컴퓨터 시스템은 사용자 한명만 컴퓨터를 사용할 수 있었고 컴퓨터 자원도 사용자 혼자만 마음대로 쓸 수 있었다. 그리고 프로그램은 메모리보다 클 수 없고 직접 배치 과정을 수행하여 항상 같은 메모리 위치에 적재되었다. 단일 프로그래밍 환경에서 연속 메모리 할당은 메모리를 사용자 영역과 OS 상주 영역으로 나눈다. OS 는 상위나 하위에 자유롭게 둘 수 있다. OS 가 상주한 영역인 모니터, 사용자 프로그램이 들어 있는 영역인 사용자, 사용하지 않는 영역인 미사용으로 나눌 수 있다. 메모리를 제어하는 모든 권한이 사용자에게 있기 때문에 사용자가 주소를 잘못 지정하면 OS가 손상될 수 있다. 그래서 (b) 와 같이 프로세서에 경계 레지스터를 두어 이를 방지한다. 사용자..
[OS] 메모리 관리의 개요
메모리 관리의 개념과 정책메모리 관리의 개념모든 프로그램은 우선 메모리에 적재되어야 실행이 가능하므로 메모리는 프로그램을 실행하는데 중요한 작업 공간이다.메모리 관리는 프로세스들을 위해 메모리를 할당하고 제거하며 보호하는 활동이다. 더 단순하게는 프로세스의 요청에 따라 메모리의 일부를 할당하고, 필요 없으면 자유롭게 재사용할 수 있도록 하는 것이다.디스크에 있는 프로그램을 실행하려면 먼저 메모리에 적재한 후 메모리 관리자가 예약된 메모리를 할당해 주어야 하는데, 이것도 메모리 관리에 해당한다.다중 프로그래밍 시스템에서는 여러 프로세스가 메모리에 상주할 수 있도록 OS 가 동적으로 메모리를 세분화하는 이 과정도 메모리 관리에 해당한다. 메모리 관리는 메모리 관리자가 담당한다. 메모리 관리자는 OS 의 관리..
[OS] 스케줄링 알고리즘
스케줄러는 스케줄링 알고리즘에 따라 프로세서를 할당하고 작업을 완료한다. 대부분의 알고리즘은 대화식 사용자 환경과 빠른 응답 시간을 구현하는 것에 집중하는데, 여기서는 단일 처리 시스템을 기준으로 주요 스케줄링 알고리즘을 알아볼 것이다. 원칙적으로는 1개의 프로세스가 여러 프로세서 버스트를 가진다. 여기서는 간략하게 프로세서 버스트 1개의 길이를 프로세스 길이, 또는 프로세스 실행 시간이라고 칭한다. 기본 스케줄링 공평성 중시 : FCFS, RR 효율성 중시 : SPN, SRTN, HRN 효율성 중시 알고리즘을 사용하기 위해서는 실행시간을 예측해야하는데 이에 대한 방법의 부재와 예측하는데 부하가 생길 수 있음. 선입선처리(FCFS, First-Come-First-Served) 스케줄링 선입선처리(FCFS..
[OS] 프로세스 스케줄링의 이해
스케줄링의 개념 단일 처리 시스템을 사용하지 않는 이유중 한 가지는 바로 이 스케줄링과 관련이 있다. 단일 처리 시스템에서 실행 중인 프로세스가 입출력을 요청하면, 이 프로세스가 실행을 마칠 때 까지는 사용하던 자원을 대기해야 하므로 효율이 많이 떨어진다. 하지만 다중 처리 시스템에서는 여러 프로세스를 동시에 메모리에 올려놓고 실행 중인 프로세스가 입출력을 요청하면, 운영체제가 실행중인 프로세서를 회수하여 다른 프로세스에게 할당한다. 이처럼 다중 처리 시스템에서는 다음과 같은 장점을 얻을 수 있다. 프로세서 이용율을 높일 수 있다. 프로세서 처리율(주어진 시간에만 처리하는 작업량)이 증가한다. 다중 프로그래밍에서 프로세서를 할당할 프로세스를 선택할 때 어떤 전략이 필요한데 이때 필요한 개념이 스케줄링 이..