남 희 2023. 3. 8. 20:56

오늘 한 일 [DONE]

  • CS 스터디에서 운영체제 공부한 내용 복습하고 객체지향 프로그래밍을 공부했다.
  • DFS/BFS 알고리즘 문제를 풀었다. DFS, BFS 모두 가능한 문제라서 둘 다 구현해 보았다. 앞으로도 가능하면 두 개 다 구현해 봐야겠다.
  • 직무 면접 답변 준비를 위해서 예전 CS 자료들을 정리했다.

📝오늘 배운 내용 간단 요약

1️⃣ 객체지향 프로그래밍

어떤 사물을 상태와 행위를 가진 객체로 추상화하여, 객체들 간 관계, 상호작용을 프로그래밍하는 방법.

 

특징

1. 상속 (Inheritance) :

     부모 클래스의 내용을 하위 클래스가 그대로 사용 가능하며 확장 가능. 관계 부여 가능.

2. 캡슐화 (Encapsulation) :

     상태와 행위를 객체로 묶어 정보를 은닉.

3. 다형성 (Polymorphism) :

     다양한 타입을 가질 수 있는 속성. 메서드나 클래스가 다양한 방법으로 동작 가능한 것.

4. 추상화 (Abstraction) :

     복잡하고 구체적인 내용을 '공통적인' 핵심 속성이나 기능으로 묶는 것.

 

SOLID 법칙

S (Single Responsibility Principle, SRP) :

     단일 책임 원칙, 모든 클래스는 하나의 책임만 가짐.

O (Open-Closed Principle, OCP) :

     개방-폐쇄 원칙, 확장에는 열려 있고, 수정에는 닫힘.

L (Liskov Substitution Princlple, LSP) :

     리스코프 치환 원칙, 부모 객체에 자식 객체를 자유롭게 넣을 수 있음.

I (Interface Segregation Principle, ISP) :

     인터페이스 분리 법칙. 인터페이스를 하나로 두는 것보단 여러 개로 두는 게 나음.

D (Dependency Inversion Principle, DIP) :

     의존 역전 법칙. 추상화된 인터페이스나 상위 클래스로 변화에 영향을 받지 않게 할 것.

 

2️⃣ Dynamic Programming

동적 계획법이라 읽지만, 근본적인 개념은 귀납적 문제 풀이 알고리즘.

복잡한 문제를 간단한 하위 문제로 나누어 이를 귀납식으로 표현하며, 이때 나온 답들은 모두 저장해 귀납식에 재사용.

중복 계산이 많은 트리 구조 or 기하 급수적으로 하위 문제가 증가할 때 사용하면 유리.


참고 자료

더보기
주홍철, <면접을 위한 cs 전공지식 노트>, 길벗, 2022

구종만, <알고리즘 문제 해결 전략 - 프로그래밍 대회에서 배우는>, 인사이트, 2012