728x90
728x90
728x90

일반프로그래밍

강의

프로그래밍언어

파이썬

다트

프레임워크

Flutter

버전컨트롤

GIT

전문칼럼

커뮤니티

수학

AI/ML

추천시스템

  • Amazon Personalize
    • AWS에서 제공하는 SaaS 추천 엔진
      • 추천 시스템에 대한 전반을 이해에 도움
      • 추천시스템 SaaS의 초기 설계에 참고하기 좋음

데이터베이스

기타

728x90

'CS' 카테고리의 다른 글

[OS]program, process, thread  (0) 2020.11.24
[OS]CPU, processor, microprocessor, core  (0) 2020.11.24
[OS]DMA(Direct Memory Access), PIO(Programmed I/O)  (0) 2020.11.24
[OS]인터럽트, 트랩  (0) 2020.11.24
(미완)UML, Unified Modeling Language란  (0) 2020.11.22
728x90

program:디스크에 저장된 수동적인 것

process:메인 메모리에 존재하는 능동적인 것

thread:프로세스의 작업 흐름

 

하나의 프로그램에 프로세스는 다수 가능

하나의 프로세스에 스레드는 다수 가능

 

멀티스레드 프로세스는 다수의 program counter를 갖는다.

 

프로세스는 상태를 갖는다.

new(새로생성)

ready(프로세서 할당 기다림)

running(프로세서가 할당되어 실행중)

terminated(실행중 종료됨)

waiting(작업이 완료되어 입출력을 기다림)

 

멀티프로그래밍으로 여러 프로세스를 메모리에 올려둬도 되는데 굳이 스레드를 여럿두어 멀티스레딩을 하는 이유는

-두 프로세스가 하나의 데이터를 공유하려면 메시지 패싱이나 공유 메모리 등을 사용해야되는데 효율도 떨어지고 개발자가 구현 및 관리하기가 번거로움

-프로세스 사이 컨텍스트 스위칭이 계속 일어나면 오버헤드가 발생, 스레드 전환에도 컨텍스트 스위칭이 발생하지만 속도가 더 빠름

(메시지 패싱:interprocess communication 중 하나로, 커널을 통해 정보를 송수신, 컨텍스트 스위칭 발생하여 느림, 동기화문제가 발생할 수 있음(수신자가 메시지 받을 때까지 송신자를 blocking 등의 형태로 동기화문제해결책 개발을 해줘야함)

(공유 메모리:커널을 거치지않고 두 프로세스가 메모리 일정역역을 사용하여 정보를 송수신, memory-safe를 개발자가 구현해야하는데 번거로움)

 

 

728x90
728x90

0. processor란, 굉장히 범용적인 단어이다.

처리 장치. 연산 처리 장치. 처리 프로그램. 데이터에 연산 조작 등 몇 개의 처리를 일으키는 기능을 갖는 「장치」나 「프로그램」의 총칭컴퓨터 시스템 전체를 가리키는 경우도 있다. 

즉, 연산을 처리하는 장치는 모두 processor이다. 대개는 CPU를 가리킨다. 하지만 GPU도 processor인 것이다.

Multiprocessor system이라고 할 때 processor는 CPU를 가리킨다. 따라서 2개 이상 CPU를 가진 컴퓨터를 가리킨다.

(가정용은 거의 Single-processor)

CPU내에 core를 각각 processor라고도 부른다. 실행 "처리장치"이기 때문

 

1. core란

먼저 CPU란

CPU-arithmetic, logical control, I/O operations을 수행

core-CPU안에서 명령을 받고 수행하는, execution unit

따라서, core는 CPU의 구성요소이다.

멀티코어란 하나의 CPU 칩셋에 다수의 코어가 집접된 형태의 CPU 종류를 가리킨다.

(요즘은 대다수가 멀티코어)

 

2. CPU, Microprocessor, Micro Processor Unit이란

CPU는 Arithmetric and Logic Unit과 Control Unit으로 이루어져 있어, 컴퓨터시스템을 통제하고 프로그램의 연산을 실행하고 처리하는 컴퓨터의 제어 장치 혹은 그 기능을 내장한 칩을 가리킨다.

Microprocessor(=Micro Processor Unit=MPU)은 모토롤라가 쓰던 CPU와 같은 장치를 가리키던 용어로, 현재는 CPU와 동의어

(CPU나 MPU 모두 원칩솔루션으로 전환했기 때문)

 

 

비고:

Micro Controller Unit이란

CPU와 입출력 모듈을 하나의 칩으로 만들어 정해진 기능을 수행하는 것, 임베디드 애플리케이션을 위해 디자인되었으며, 개인용 컴퓨터(PC)에서처럼 다양한 요구에 동작하는게 아니라, 정해진 일을 수행하도록 프로그래밍되어, 냉장고나 전자레인지 등에 사용됨

728x90

'CS' 카테고리의 다른 글

[CS] 개발자에 좋은 글/사이트  (0) 2023.08.21
[OS]program, process, thread  (0) 2020.11.24
[OS]DMA(Direct Memory Access), PIO(Programmed I/O)  (0) 2020.11.24
[OS]인터럽트, 트랩  (0) 2020.11.24
(미완)UML, Unified Modeling Language란  (0) 2020.11.22
728x90

DMA(Direct Memory Access):device와 memory를 직접 연결하는 방식으로, 버스가 지원하는 기능, device controller에 의해 직접 메모리에 전달하며 CPU에서는 데이터 이동이 완료되었다는 인터럽트만 한 번 발생, 따라서 CPU가 하는 일이 줄어들어 성능이 좋아짐

PIO(Programmed I/O):device data를 CPU를 거쳐 메모리에 로드하는 방식으로 DMA 이전의 방식으로 성능이 느리다.

 

728x90

'CS' 카테고리의 다른 글

[OS]program, process, thread  (0) 2020.11.24
[OS]CPU, processor, microprocessor, core  (0) 2020.11.24
[OS]인터럽트, 트랩  (0) 2020.11.24
(미완)UML, Unified Modeling Language란  (0) 2020.11.22
[Python]Static variable, Static method, Class method  (0) 2020.11.22
728x90

인터럽트(Interrupt):이벤트 발생을 CPU에게 알리는 것, 하드웨어와 소프트웨어에 의해 발생할 수 있다.

트랩(Trap):소프트웨어에 의해 발생하는 인터럽트를 트랩이라 한다.

 

하드웨어는 System bus를 통해 CPU에 신호를 보냄으로써 인터럽트를 발생

소프트웨어는 System call이라는 특별한 명령으로 인터럽트를 발생

 

728x90
728x90

정리해야될 대상으로 남겨둔다.

 

 

 

참고자료:

 

 

UML: 클래스 다이어그램과 소스코드 매핑

불과 몇 년 되지 않은 학생 시절... 처음으로 UML을 접했고, UML의 기초적인 그리는 법과 사용법을 배웠습니다. 개인적으로 쉽지 않은 수업이었는데 그 중 가장 많이 사용되는 클래스 다이어그램에

www.nextree.co.kr

 

728x90
728x90

static variable이나 static method, 모두 static이란 의미는 

"객체마다 달라지지 않는"

"객체 생성을 하지 않아도"

라는 컨셉이다.

 

 

 

Static variable = Class variable

파이썬에서는 static variable을 아주 간단하게 구현이 가능

 

class Sample(object):

  sv = 'I'm static variable'

 

이와 같이 class variable이 static variable 역할을 한다.

즉 객체가 몇개를 생성하든, 같은 memory를 참조하는 variable이 static=class variable이다.

(즉 객체마다 달라지지 않고 고정된(static) variable)

 

 

 

클래스에서 직접 접근할 수 있는 method로는 파이썬에서 2가지가 존재한다. classmethod와 staticmethod

둘의 차이는

classmethod는 method 직전 라인에 @classmethod를 작성

staticmethod는 method 직전 라인에 @staticmethod를 작성

classmethod는 method에 첫 인자로 cls를 입력 e.g. def add(cls, x, y)

staticmethod는 method에 첫 인자가 cls나 self가 필요 없음 e.g. def add(x,y)

classmethod는 class variable로의 접근, 수정이 가능

staticmethod는 class variable로의 접근과 수정이 모두 불가능

classmethod는 factory methods(디자인 패턴)을 만들 때 사용

staticmethod는 utility functions을 만들 때 사용(사실 class 내에 정의하지 않고 사용해도 되지만, 해당 class에 있는게 문맥상 떨어져서 넣는게 대다수)

 

factory methods란, 조건에 따라 다른 객체를 생성하는 일을 factory라는 것에 위임하는 형태

2가지 효용을 갖는다.

-객체를 생성하는 곳이 너무 많은 상황에, 클래스의 생성자 수정이 발생했을 때, 각 객체생성부분을 다 찾아 수정하기가 번거로울 때, factory methods를 사용하면 factory methods부분만 수정하면 된다.

-조건에 따라 다른 객체를 생성하는 부분을 factory에 위임함으로써, 객체를 생성하여 사용하는 개발자로 하여금 개별 클래스에 대한 상세사항을 알 필요가 없도록 함

즉, 클래스가 아주 다양하고 조건에 따라 다른 클래스를 사용해야할 때 factory methods를 만들어 사용하며

python의 경우 그 때 classmethod가 그 일을 해줄 수가 있다.

 

 

 

 

참고자료:

 

 

 

class method vs static method in Python - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 

728x90
728x90

프로그래밍 패러다임이란, 프로그래밍 언어들을 특징을 기반으로 분류하는 방법론이다.

각 언어는 여러 패러다임에 속할 수 있다.(파이썬은 함수형이기도하고 객체지향이기도하고...)

프로그래머가 프로그래밍의 관점을 갖게 해주고 결정하는 역할을 한다.

 

Declarative와 Imperative의 세부 분류와 각각에서의 중요 키워드를 정리한다.

 

Declarative(선언형)

  Functional(함수형, 순수함수(Pure function), 부작용(side-effects), 고계함수(Hihger-order function), 커링(currying), 컴비네이터(combinator))

 

Imperative(명령형)

  Procedural(절차형)

  Object-oriented(객체지향형, 추상화(Abstraction), 인터페이스(Interface), 추상클래스(Abstact class), 캡슐화(Encapsulation), 상속(Inheritance), 다형성(Polymorphism, Overriding, Overloading))

기타:

 

절차형 VS 객체지향형

"절차지향 프로그래밍은 프로그램의 순서와 흐름을 먼저 세우고 필요한 자료구조와 함수들을 설계하는 방식이고, 객체지향 프로그래밍은 반대로 자료구조와 이를 중심으로 한 모듈들을 먼저 설계한 다음에 이들의 실행순서와 흐름을 짜는 방식이다" 

 

Higher-order function이란, argument내에 function이 존재하거나 return에 function인 function

Combinator란, argument가 function이나 combinator로만 구성된 higher-order function

 

참고자료:

 

절차지향과 객체지향에 관한 고찰

누군가 내게 자바의 특징을 말해보라고 묻는다면 무의식적으로 객체지향 언어라고 말할 것이다. 그만큼 '자바 == 객체지향 언어'라는 인식이 강하게 박혔기 때문이다. 그러나 남에게 핵심을 간

gbsb.tistory.com

 

 

객체지향의 4대 특성(캡슐화,상속,추상화,다형성)

캡슐화 비슷한 역할을 하는 속성과 메소드들을 하나의 클래스로 모은것을 캡슐화 라고 한다. 캡슐화에 속한 개념으로 정보 은닉이라는것이 있는데, 캡슐 내부의 로직이나 변수들을 감추고 외부

simsimjae.tistory.com

 

 

다형성에 대해서 설명해보세요.

Overriding? Overloading? | 다향성에 대해서 설명해보세요. 객체지향 프로그래밍의 특징 중 하나인 다형성(polymorphis)은 상속을 통해 기능을 확장하거나 변경하는 것을 가능하게 해 주고, 같은 클래스

brunch.co.kr

 

 

 

Higher Order Functions

Learning Outcomes

tgdwyer.github.io

 

728x90
728x90

문제:

주어진 dictionary의 key는 string, value는 list거나 dictionary이다.

이 때,

list인 경우는 element가 정수이고 size가 1이상이다.

dictionary인 경우는 마찬가지로 key가 string이고 value가 dictionary거나 list이다.

이 때, 원래의 dictionary의 nested structure는 유지하면서, list에서 1개의 원소를 꺼낸 가능한 모든 dictionary를 list로 반환하는 함수를 작성하여라.

 

ex)

dic1 = {'a':[1,2], 'b':[3], 'c':{'e':[4,5], 'd':{'e':[6,7], 'f':[8]}}}

이 때, 반환값은 list이고 각 원소는

{'a': 1, 'b': 3, 'c': {'e': 4, 'd': {'e': 6, 'f': 8}}}
{'a': 1, 'b': 3, 'c': {'e': 4, 'd': {'e': 7, 'f': 8}}}
{'a': 1, 'b': 3, 'c': {'e': 5, 'd': {'e': 6, 'f': 8}}}
{'a': 1, 'b': 3, 'c': {'e': 5, 'd': {'e': 7, 'f': 8}}}
{'a': 2, 'b': 3, 'c': {'e': 4, 'd': {'e': 6, 'f': 8}}}
{'a': 2, 'b': 3, 'c': {'e': 4, 'd': {'e': 7, 'f': 8}}}
{'a': 2, 'b': 3, 'c': {'e': 5, 'd': {'e': 6, 'f': 8}}}
{'a': 2, 'b': 3, 'c': {'e': 5, 'd': {'e': 7, 'f': 8}}}

 

해결:

비고:

-실제 업무에서 RandomizedSearch를 구현하는 데에 필요하여 작성함

-비교적 간단한 재귀인데도, 생각보다 시간이 필요했다.

-필요한 함수들을 침착하게 만들다보면 해결됨

-dictionary를 merge하는 것은 python 3.9에서는 union operator를 사용할 수 있지만, 이전 버전에서는 {**dic1, **dic2}라는 못생긴 방법으로 해야함

 

 

728x90
728x90

문제 배경:

string이 주어져있을 때, string의 period를 다음과 같이 정의하자.

substring의 반복으로 string을 만들 수 있을 때, 가장 짧은 substring의 길이를 period라 하자.

ex)

abab -> ab를 2번 반복하거나 abab를 1번 -> ab가 더 짧고, 그 때의 길이가 2이므로 period는 2

abcabcabd -> abcabcabd를 1번 -> period는 9

 

문제:

string이 argument로 들어왔을 때, string의 period를 반환하는 함수를 작성하여라.

 

해결:

 

비고:

-counter을 해석하는게 가장 관건이다. 

예를 들어 abababab의 경우

  -counter[3] = 2라는 것은, s[:4](즉 index가 0에서 3까지, substr=abab)에서 substr[:2]와 substr[-2:]가 같다는 말, 

  -counter[4] = 3라는 것은, s[:5](즉 index가 0에서 4까지, substr=ababa)에서 substr[:3]와 substr[-3:]가 같다는 말

-즉 counter가 for i in range(1,len(s))를 돌면서 prefix=suffix되는 가장 긴 길이를 보관함

-난이도 상

 

728x90

+ Recent posts