본문 바로가기

IT 공부/공부하며 알게된 사실들11

알고리즘과 도메인 로직의 분리 (2023-10-30) 데이팅 앱에서 남녀간 매칭을 위해 사용하는 알고리즘 도구는 그래프. 그래프는 노드들 사이의 관계를 매핑하는데 사용된다. 범용 도구이며, 데이팅 앱과 같은 소프트웨어는 노드의 집합(남자와 여자)과 그 사이의 관계에 대한 제약을 통해 원하는 대로 그래프를 만들어 사용한다. 남자 집합의 노드와 여자 집합의 노드 사이의 연결을 최대한 많이 만드는 것이 핵심이며, 여기에 가중치가 고려된다. 이때 가중치 계산 방법은 알고리즘이라기보단, 도메인(domain) 로직에 가깝다. 남녀 사이의 좋은 매칭이 어떤지는 컴퓨터 과학자가 알 수는 없다. 컴퓨터 과학자는 다만 검증된 그래프 이론과 컴퓨팅 도구를 제공할 뿐이다. 알고리즘을 배운다고 해서 모든 도메인의 소프트웨어를 구현할 수 있는 것은 아니다. 알고리즘과는 별개로 도메.. 2023. 10. 31.
함수의 본질과 컴퓨팅 사고력 1. 프로그램에서 함수의 중요성 함수는 소프트웨어의 본질이자, 소프트웨어라는 건축을 받치는 벽돌이다. 소프트웨어는 함수의 연속으로 구성되며, 함수가 다시 함수를 호출하는 구조, 즉 재귀적인 구조다. 함수는 정보 처리의 최소 단위다. 소프트웨어의 궁극적인 본질은 무수히 많고 다양한 데이터를 입력받아 일관된 방식으로 계산하거나 처리하고 그 결과를 받아내는 것이다. 따라서 함수를 설계한다는 것 자체가 컴퓨터를 통해 문제를 해결하겠다는 것이다. 결국 프로그래머란 함수를 설계하는 사람이다. 2. 컴퓨팅 사고력과 일반 지능 컴퓨팅 사고력에 관해 오해하지 말아야 할 것은, 컴퓨팅 사고력이 좋다고 해서 반드시 IQ가 높다고 볼 수는 없다는 것이다. 상관관계는 있을 지 모르겠다. 그러나 컴퓨팅 사고력은 순수한 지능적인 .. 2023. 10. 29.
DIP(의존성 역전 원칙)에 대해 지금까지 잘못 알고 있었던 것 같다. 1. DIP와 자바 인터페이스의 의미. DIP란 의존성 역전 원칙(Dependancy Inversion Principle)을 이르는 영어 표현이다. 여기서 의존성이란 소스 코드에 대한 의존성을 말한다. 의존성이 객체지향에서 중요하게 다뤄지는 이유는 한 모듈이 다른 모듈에 의존할 때 변경의 여파가 발생하기 때문이다. 사용하는 모듈A가 사용되는 모듈B에 의존한다. 이때 모듈B의 내용이 변경되면 그것을 사용하는 모듈A도 변경되어야 한다는 압박을 받게 된다. 또 다른 SOLID 원칙 중 하나인 OCP(개방 폐쇄 원칙)는 이러한 의존성의 방향을 일관적으로 관리하는 원칙을 말한다. 우리가 시스템을 여러 모듈과 컴포넌트, 클래스로 분리한 이상 이들이 서로를 의존하는 것은 절대 막을 수 없다. 의존성이 나쁜 것이 아니.. 2023. 10. 19.