신입 자라기 23일 차
Task Logging
시간 | Task |
6 : 45 | 기상 |
7 : 00 ~ 8 : 00 | 출근 시간 |
8 : 00 ~ 9 : 10 | 헬스 |
9 : 10 ~ 9 : 30 | 샤워 |
9 : 30 ~ 9 : 45 | 출근 |
9 : 45 ~ 10 : 00 | 1. 짐정리 |
10 : 00 ~ 11 : 30 | 1. 메서드 구상 및 구현 |
11 : 30 ~ 13 : 00 | 점심시간 1. 배민 |
13 : 00 ~ 18 : 00 | 1. 메서드 수정 2. SOLID 원칙 숙지 3. 간식타임 |
18 : 00 ~ 19 : 00 | 저녁 시간 |
19 : 00 ~ 20 : 30 | 1. 리스코피 치환 원칙 공부 2. 딴짓 |
20 : 30 ~ 21 : 30 | 퇴근 시간 |
21 : 30 ~ 22 : 30 | 1. 짐정리 2. 샤워 |
22 : 30 ~ 23 : 55 | 1. (케글)넷플릭스 영화 추천시스템 따라하기 2. 블로그 포스팅 |
객체 지향 프로그래밍 설계 원칙 SOLID
1. 단일 책임원칙(SRP : Single Responsibility Principle)
- 클래스는 단 한 개의 책임을 가져야 함
2. 개방 폐쇄 원칙(Open/Closed Principle)
- 클래스는 확장에 열려 있어야 하고 수정에는 닫혀 있어야 함
- 추상화는 개방 폐쇄 원칙의 핵심 요소
3. 리스 코프 치환 원칙(Liskov Substitution Principle)
- 부모 클래스의 인스턴스를 사용하는 위치에 자식 클래스의 인스턴스를 대신 사용했을 때 원래 의도대로 동작해야 함
4. 인터페이스 분리 원칙(Interface Segregation Principle)
- 인터페이스 : 추상 메서드로만 이루어진 추상 클래스
- 하나의 일반적인 인터페이스보다 여러 개의 구체적인 인터페이스 구현
- 인터페이스 기능과 역할을 기준으로 나누고, 꼭 필요시에 상속받아 사용
5. 의존성 역전 원칙(Dependency Inversion Principle)
- 특정 클래스를 참조하는 상황이 생기면, 그 클래스의 추상 클래스를 만들어서 사용
리스 코프 치환 원칙
- 부모 클래스의 인스턴스를 사용하는 위치에 자식 클래스의 인스턴스를 대신 사용했을 때 코드가 원래 의도대로 동작해야 함
- 부모 클래스의 인스턴스 자리에 자식 클래스의 인스턴스도 들어갈 수 있어야 함
- 부모 클래스의 행동 규약을 자식 클래스가 위반하면 안 됨
- 자식 클래스가 부모 클래스의 변수와 메서드를 있는 그대로 사용하면 문제가 없는 자식 클래스가 오버 라이딩할 때 문제가 될 수 있음
그래서 오버 라이딩을 언제 잘못하는데?
- 자식 클래스가 부모 클래스의 변수 타입을 변경할 때
- 자식 클래스가 부모 클래스 메서드의 파라미터 or 리턴 값의 타입/개수를 바꿀 때
- 자식 클래스가 부모 클래스의 의도와 다른 메서드를 오버 라이딩할 때
타입 변경/파라미터 추가해서 리스 코프 치환 원칙 위반한 경우 예시
class Programmer:
"프로그래머 클래스"
company_name = '네카쿠라배'
salary_growth_rate = 1.5
def __init__(self, name, salary):
self.name = name
self.salary = salary
def raise_salary(self):
# 개발자 연봉 인상메서드
self.salary *= salary_growth_rate
@property
def wage(self):
return '연봉계약'
class Company(Programmer):
def __init__(self, name, salary):
super().__init__(name,salary)
def raise_salary(self, money):
self.salary += money
- Company클래스는 Programmer 클래스를 상속받고 있고 raise_salary 메서드를 오버 라이딩하고 있음
- raise_salary() 부분에서 오류 발생, Programmer 클래스에 raise_salary부분에는 money라는 파라미터가 없는데 자식 클래스인 Company의 raise_salary메서드에는 money라는 파라미터가 추가되어있음
출근길에 보는 CS
명령어가 실행되는 과정 In CPU
- 제어장치가 명령어를 처리
- 명령어를 처리하는 과정 전체를 스레드라고 함
- 일반적으로 4단계로 나누어짐(패-해-실-쓰)
- 명령어 패치(Instruction Fetch) : 다음에 실행할 명령어를 레지스터에 저장
- 명령어 해석(Instruction Decode) : 명령어 해석
- 명령어 실행(Execution) : 해석을 토대로 실행
- 쓰기(Write Back) : 실행 결과를 저장
프로세스?
- 실행 중에 있는 프로그램
- 운영체제로부터 시스템 자원을 할당받는 작업 단위
- 프로세스는 Code, Data, Stack, Heap의 독립된 메모리 영역을 할당 받음
- 프로세스는 최소 1개 스레드를 가짐
- 프로세스는 별도 주소 공간에서 실행
- 프로세스 간 통신을 하기 위해선 파이프, 파일, 소켓 등을 사용해야 함
Context Switching(문맥 교환)
- 현재 진행 중인 작업의 상태를 저장하고 다음 작업의 상태를 적용하는 과정
언제 문맥 교환이 이루어짐?
- 멀티 프로세스 환경에서는 CPU가 하나의 프로세스를 실행할 때, 인터럽트가 발생해서 다음 우선순위의 프로세스가 실행되야할 때 문맥 교환이 이루어짐
문맥 교환 과정은?
- 기존 프로세스의 상태나 레지스터 값을 PCB(Process Control Block)에 저장
- CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 PCB를 교체
레지스터 값 (Context) : CPU가 해당 프로세스를 실행하기 위한 프로세스 정보
퇴근길에 읽어보는 Tech Blog
(Mar 19, 2018) : https://brunch.co.kr/@kakao-it/212
3줄 요약
- 카카오 I의 추천 엔진 루빅스에는 콘텐츠 클릭률(Click-through Rate, CTR, (클릭수 / 전체 노출수))을 핵심 지표로 사용했는데, 클릭률만으로는 사용자의 만족도를 알아내기 어려웠다
- 그래서 열독률(Deep Reading Index, DRI, (실 체류 시간 / 기대 체류 시간))를 도입해 클릭률과 조합한 추천 알고리즘을 뉴스, 연예인 탭 등등에 적용했다.
- 아주 만족스러운 결과를 얻었다.
'Study > 신입 자라기' 카테고리의 다른 글
[Study] 신입 자라기 - 25 (0) | 2022.03.17 |
---|---|
[Study] 신입 자라기 - 24 (0) | 2022.03.16 |
[Study] 신입 자라기 - 22 (0) | 2022.03.11 |
[Study] 신입 자라기 - 21 (0) | 2022.03.10 |
[Study] 신입 자라기 - 20 (0) | 2022.03.08 |