반응형

CS 14

[OOP] 좋은 객체 지향 설계의 5가지 원칙이란?(SOLID)

스프링을 공부하면서, 요즘 스프링을 공부하면서 어떻게 코드를 짜야 좀 더 객체지향적으로 짤 수 있을까? 라는 생각이 많이 들었다. 그러던 중 클린코드로 유명한 로버트 마틴(Robert C. Martin's)이 정의한 좋은 객체 지향 설계의 5가지 원칙을 알게 되었다. 5가지 원칙의 앞글자를 따서 SOLID라고 부른다. SOLID 5가지 원칙은 아래와 같다. 한 가지씩 차근차근 알아보자. SRP(Single Responsibility Principle) : 단일 책임 원칙 OCP(Open Closed Principle) : 개방-폐쇄 원칙 LSP(Liskov Substitution Principle) : 리스코프 치환 원칙 ISP(Interface Segregation Principle) : 인터페이스 분..

CS/OOP 2021.08.13

[DB] 인덱스(index)란?

데이터베이스를 공부하면서, 서버 개발자를 꿈꾸면서 데이터베이스를 깊게 공부해야겠다는 막연한 생각만 있을 뿐, 단순 쿼리만 짜는 게 전부였다. 이번 기회에 데이터베이스에 대해 심도 있게 공부하려고 한다. 인덱스란? Index를 번역하면 "색인"이라는 뜻을 가지고 있다. 색인은 아래와 같은 뜻을 갖고 있다. 1. 어떤 것을 뒤져서 찾아내거나 필요한 정보를 밝힘. -네이버 사전- 2. 책 속의 내용 중에서 중요한 단어나 항목, 인명 따위를 쉽게 찾아볼 수 있도록 일정한 순서에 따라 별도로 배열하여 놓은 목록. -네이버 사전- 3. 책 속에 다루어진 중요한 단어나 용어를 독자가 쉽게 찾을 수 있도록 페이지를 밝혀 벌여 놓은 것. 보통, 책의 맨 뒤 부분에 보이나 드물게 앞부분에 보이는 경우도 있음 -구글 사전-..

CS/DB 2021.08.02

[OS]Threads(스레드)

스레드란 프로세스의 실행 단위라고 할 수 있으며, 한 프로세스 내에서 동작되는 여러 실행 흐름으로 프로세스 내의 주소 공간이나 자원을 공유할 수 있다. 위의 그림과 같이 Code, data, files, registers, stack을 담고 있는 프로세스가 있다고 가정하자. 만약 사용자가 똑같은 프로그램 3개를 실행한다면, 아래의 그림과 같이 3개의 프로세스가 실행될 것이다. 그림을 보면 똑같은 프로그램을 바탕으로 실행한 프로세스임에도 불구하고, code, data, files 부분을 각각 갖고 있다. 이때 자원 낭비를 줄이고자 등장한 개념이 Threads(스레드)이다. code : 실행 중에 바뀌지 않기 때문에 1개만 존재하면 된다. data, files: 프로세스마다 다르기 하지만 자원 공유가 가능하..

CS/OS 2021.05.12

[OS]프로세스 간 통신(Interprocess Communication)

프로세스는 독립적(independet)이거나 협력적(cooperating)일 수도 있다. 프로세스가 협력적인 이유는 아래와 같다. 정보 공유(Information sharing) 계산 가속화(Computation speedup) 모듈성(Modularity) 편의성(Convenience) Cooperating processes는 데이터나 정보를 교환하기 위해 IPC 기법이 필요하다. IPC 기법 (크게 두 가지 있다( Shared memory Message passing Shared memory (공유 메모리) 통신을 하고자하는 두 프로세스가 일정한 메모리 영역을 공유함으로서 데이터를 주고 받는 기법 ex) A가 공유 메모리에 데이터를 쓰고, B가 공유 메모리에 있는 데이터를 읽는다면 데이터 공유가 가능함..

CS/OS 2021.04.30

[OS]프로세스 연산 (Operations on Processes ), 시스템 콜(System Call)

System Call fork( ), exec( ), wait( )와 같은 것들은 Process 생성과 제어를 위한 System call임. fork, exec는 새로운 Process 생성과 관련이 되어 있음 wait는 Process (Parent)가 만든 다른 Process(child)가 끝날 때까지 기다리는 명령어임. 프로세스 생성(Process Creation) 프로세스는 여러 개의 새로운 프로세스들을 생성할 수 있다. 생성한 프로세스를 부모 프로세스(parent process), 새로운 프로세스는 자식 프로세스라고 부른다. 또한 생긴 새로운 프로세스도 다시 프로세스를 생성할 수 있으며, 이러한 과정을 반복하면 프로세스 트리가 생성된다. 각 노드들은 프로세스 식별자(pid)를 사용하여 구분되며, 이..

CS/OS 2021.04.30

[OS]프로세스(Process)란?

프로세스 (Process) 프로세스란 실행 중인 프로그램을 의미한다. (프로그램 그 자체는 프로세스가 아님) 아래 사진은 프로세스가 메모리에 로드되어 있는 모습이다. 0 주소는 프로세스의 시작 위치 주소이고, max 표시는 프로세스의 마지막 주소를 의미한다. Text section : 프로그램의 명령들, 즉 코드들을 의미한다 + 코드가 실행 중이기 때문에 PC와 같은 프로세서 레지스터를 포함 Stack : 함수의 동작과 관련된 내용들이 저장되어 있음 ex) 함수의 복귀주소, 로컬 변수, 함수의 매개변수와 같이 임시적인 자료를 가지는 것들 Data : 전역 변수가 포함되어 있음 Heap : 동적으로 메모리가 할당 되었을 경우 사용됨 ex) C언어의 malloc 화살표 부분 : 프로세스의 영역이긴 하지만, ..

CS/OS 2021.04.29

[OS]멀티프로그래밍(Multiprogramming)

개요 프로세스(process)에 대해 공부하기 전에 먼저 멀티프로그래밍을 공부하는 것이 좋다. Uni-Programming (단일 프로그래밍) 멀티프로그래밍 이전에는 유니프로그래밍 방식으로 컴퓨터가 동작했다. 위의 사진을 보면 Program A가 실행될 때 RUN->Wait->Run->Wait 형태로 프로그램이 동작하기 된다. (이러한 RUN->Wait->Run->Wait 형태는 모든 프로그램에 공통되는 동작이다. CPU연산->입출력을 계속 반복하는 형태) 이때 Wait는 CPU idle 상태라고 하는데, I/O(입출력) 상태 이거나 다른 동작을 하고 있기 때문에 CPU가 일을 하지 않고 있다. 그 당시에는 CPU 연산과 같은 귀중한 자원이 idle 상태에 장기간 유지되는 것이 굉장한 낭비라고 생각되었기..

CS/OS 2021.04.27

상속(inheritance) [JAVA]

상속이란? 객체 지향의 상속(inheritance)은 한 클래스가 기존 클래스의 속성이나 기능(메소드)을 재사용(reuse)하면서 자신의 새로운 속성이나 기능을 추가해서 확장(extend)하거나 기존 기능을 정제하고 개선(refine)하는 구현 방식 부모 클래스 기존 클래스 자식 클래스 확장되거나 개선된 클래스 자식 클래스는 부모 클래스의 모든 속성과 함수들을 상속 받지만, 부모 클래스에서 자식 클래스가 접근할 수 있는 속성과 메소드를 지정 가능 부모 클래스는 한 개 이상의 자식 클래스와 관계를 맺는 계층 구조로 표현 가능 공통 부분을 부모 클래스에, 서로 다른 부분은 자식 클래스에 구현 가능 class Child extends Parent { } 상속은 클래스를 만드는 것과 비슷하게, 코드의 재사용성을..

CS/OOP 2021.03.15

인터페이스(Interface)와 추상 클래스(abstract class) [JAVA]

인터페이스(interface) 사전적 정의 "서로 다른 두 시스템, 장치, 소프트웨어 따위를 서로 이어 주는 부분. 또는 그런 접속 장치" - 표준국어대사전 자바의 인터페이스 함수를 미리 선언하고 구현은 비워놓은 추상 메소드 함수 선언을 지켜서 구현하라는 약속 인터페이스로 선언된 함수들은 다른 클래스에서 구현됨 인터페이스의 장점 두 가지 이미 구현된 것들을 교체하기 쉬움 다중 상속을 해야 하는 경우에 사용 가능 class 클래스이름 implement 인터페이스 이름 { // 인터페이스에서 선언된 함수 구현 코드 // 나머지 코드 } 인터페이스는 상속 관계의 부모 클래스와 유사하게 사용 가능 인터페이스를 구현하는 클래스 객체도 인터페이스 변수에 저장하거나 인자로 전달 가능 인터페이스는 부모 클래스인 것처럼..

CS/OOP 2021.03.15

클래스들의 관계[JAVA]

연관 (association) 두 클래스 사이가 연결됨 클래스 간에 참조가 사용됨 클래스의 멤버 변수로 다른 클래스가 저장됨 의존(dependency) 연관과 비슷하지만 참조를 사용하는 시기가 짧음 메소드 내부에서 다른 클래스 객체를 생성해서 사용 메소드에 인자로 다른 클래스 객체를 전달 받아 함수 내부에서 다른 클래스의 메소드 호출 메소드에서 다른 클래스 객체를 반환하고, 반환 받은 쪽에서 메소드를 호출 집합(aggregation) 두 개는 비슷하지만 전체와 부분의 생명 주기가 일치하는지로 구분 집합은 전체와 부분의 생명 주기가 다름 생성자나 메소드에 입력으로 다른 객체를 전달받아서 멤버 변수에 저장한다면 집합으로 보면 됨 구성(composition) 전체와 부분의 생명 주기가 일치 출처 - 상명대 객..

CS/OOP 2021.03.06
반응형