본문 바로가기

IT 공부104

하노이 탑 재귀 문제는 엉뚱하게 해결할 수 있으니 주의해야 한다. 1. 하노이의 탑 하노이의 탑은 알고리즘 과목에서 "재귀"를 공부할 때 단골로 나오는 예제 중 하나다. 너무 자주 나와서 모르는 개발자가 없는 것 같다. 그래서인지, 문제는 사실 꽤 어려운 편에 속하는 데도 불구하고 문제 난이도가 최하로 분류되곤 한다. 문제는 매우 간단하다. 왼쪽의 원판 N개를 3번째 막대기로 하나씩 옮기면 된다. 이때 각 원판은 자신보다 무거운 것이 위에 있으면 안 된다. 하노이의 탑 알고리즘은 구글링을 해서 누구나 쉽게 알 수 있으니, 이 글에서는 내가 이 문제를 풀면서 저질렀던 실수를 작성하고 이에 대해 피드백(반성)을 하려고 한다. 2. 알고리즘은 풀기만 하면 안 된다. 알고리즘 문제들을 가지고 IT기업에서 면접을 보는 이유는 그것을 풀 수 있는가의 여부가 아니라, 그것을 어떻게.. 2023. 10. 26.
DIP(의존성 역전 원칙)에 대해 지금까지 잘못 알고 있었던 것 같다. 1. DIP와 자바 인터페이스의 의미. DIP란 의존성 역전 원칙(Dependancy Inversion Principle)을 이르는 영어 표현이다. 여기서 의존성이란 소스 코드에 대한 의존성을 말한다. 의존성이 객체지향에서 중요하게 다뤄지는 이유는 한 모듈이 다른 모듈에 의존할 때 변경의 여파가 발생하기 때문이다. 사용하는 모듈A가 사용되는 모듈B에 의존한다. 이때 모듈B의 내용이 변경되면 그것을 사용하는 모듈A도 변경되어야 한다는 압박을 받게 된다. 또 다른 SOLID 원칙 중 하나인 OCP(개방 폐쇄 원칙)는 이러한 의존성의 방향을 일관적으로 관리하는 원칙을 말한다. 우리가 시스템을 여러 모듈과 컴포넌트, 클래스로 분리한 이상 이들이 서로를 의존하는 것은 절대 막을 수 없다. 의존성이 나쁜 것이 아니.. 2023. 10. 19.
클린 아키텍처 - 로버트 c 마틴 요약 part 2 로버트 c 마틴의 클린 아키텍처를 읽고 공부한 내용을 바탕으로 작성한 요약 글입니다. 챕터의 구성은 책을 따르지만, 그 내용은 인용된 부분도 있으나 대부분은 제가 이해한 방식대로 제 언어로 풀어 기록했으니, 정보를 얻으실 때 주의하기 바랍니다. 4부. 컴포넌트 원칙 12장. 컴포넌트 (발전 과정) 프로그래밍의 초기 시절, 라이브러리 함수를 사용하기 위해서는 코드에 라이브러리 소스 코드(!)를 직접 포함시켜 컴파일하는 식으로 사용했다. 즉, 애플리케이션의 소스코드는 사실상 모든 함수의 구현 코드가 있는 소스코드 덩어리였다고 해도 과언이 아니다. 실제로 초기의 라이브러리 함수들은 소스 코드로 유지되고 배포되었다. 그러나 라이브러리 함수의 규모가 커지면 커질수록 컴파일하기 위한 자원이 크게 소모되었다. 소스코.. 2023. 10. 19.
클린 아키텍처 - 로버트 C 마틴 요약 (ch1 ~ ch3) 챕터별로 정리했으나, 제가 이해한 방식대로 저의 언어를 사용해 표현했기 때문에 혹시라도 정보를 얻으실 때는 주의하시기 바랍니다. - 2023/10/17 0. 추천사 건출물과는 달리, 소프트웨어의 구조가 과연 우리의 직관과 일치하는지는 분명하지 않다. 소프트웨어는 무엇으로 구성되는가? 소프트웨어는 소프트웨어로 구성된다. 데이터를 받고, 처리해서, 결과를 뱉어낸다. 이런 코딩 거북이들이 연쇄적으로 서로를 떠받치는 형태다. 그러니 건축물에서 볼 수 있는 물리적 구조의 다양성 앞에서 소프트웨어는 무색해진다. 소프트웨어 아키텍처에서의 소프트웨어는 본질적으로 재귀적이고 프랙털 구조로 되어 있다. 0. 서문 현재의 소프트웨어는 과거와 동일한 것들로 구성된다. 컴퓨터 프로그래밍을 하는 관행을 정말 유심히 관찰해보면 지.. 2023. 10. 17.