본문 바로가기

Study/신입 자라기

[Study] 신입 자라기 - 23

신입 자라기 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단계로 나누어짐(패-해-실-쓰)
  1. 명령어 패치(Instruction Fetch) : 다음에 실행할 명령어를 레지스터에 저장
  2. 명령어 해석(Instruction Decode) : 명령어 해석
  3. 명령어 실행(Execution) : 해석을 토대로 실행
  4. 쓰기(Write Back) : 실행 결과를 저장
프로세스?
  • 실행 중에 있는 프로그램
  • 운영체제로부터 시스템 자원을 할당받는 작업 단위
  • 프로세스는 Code, Data, Stack, Heap의 독립된 메모리 영역을 할당 받음
  • 프로세스는 최소 1개 스레드를 가짐
  • 프로세스는 별도 주소 공간에서 실행
  • 프로세스 간 통신을 하기 위해선 파이프, 파일, 소켓 등을 사용해야 함

Context Switching(문맥 교환)
  • 현재 진행 중인 작업의 상태를 저장하고 다음 작업의 상태를 적용하는 과정

언제 문맥 교환이 이루어짐?

  • 멀티 프로세스 환경에서는 CPU가 하나의 프로세스를 실행할 때, 인터럽트가 발생해서 다음 우선순위의 프로세스가 실행되야할 때 문맥 교환이 이루어짐

문맥 교환 과정은?

  1. 기존 프로세스의 상태나 레지스터 값을 PCB(Process Control Block)에 저장
  2. CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 PCB를 교체
레지스터 값 (Context) : CPU가 해당 프로세스를 실행하기 위한 프로세스 정보

퇴근길에 읽어보는 Tech Blog

(Mar 19, 2018) : https://brunch.co.kr/@kakao-it/212

 

열독률 적용한 카카오 추천 알고리즘, 그 결과는?

체류 시간, 페이지뷰 일제히 상승 | 카카오는 지난 2018년 1월 알고리즘 윤리 헌장을 발표했습니다. 인공지능 분야를 선도하는 기업으로서 그에 걸맞은 윤리 원칙을 세우고 지켜나가기 위함이었

brunch.co.kr

3줄 요약

  1. 카카오 I의 추천 엔진 루빅스에는 콘텐츠 클릭률(Click-through Rate, CTR,  (클릭수 / 전체 노출수))을 핵심 지표로 사용했는데, 클릭률만으로는 사용자의 만족도를 알아내기 어려웠다
  2. 그래서 열독률(Deep Reading Index, DRI, (실 체류 시간 / 기대 체류 시간))를 도입해 클릭률과 조합한 추천 알고리즘을 뉴스, 연예인 탭 등등에 적용했다.
  3. 아주 만족스러운 결과를 얻었다.

'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