1. 인터페이스란? 1.1 처음보는 전자레인지로 음식을 데우는 방법 위 사진은 구글에 `전자레인지`라고 검색했을 때 나오는 사진들 중 아무 사진이나 가져온 것이다. 이 전자렌지로 어제 먹고 남은 치킨을 데워달라. 할 수 있겠는가? 쉽다. 문을 열고, 치킨을 넣은 다음 문을 닫고, 아래에 시간으로 추측되는 숫자들이 적힌 다이얼을 돌리고 기다리면 따뜻하고 눅눅한 치킨이 나오게 된다. 우리는 오늘 처음 보는 이 전자레인지로 차디찬 닭고리를 데웠다. 내가 전자레인지라고 알려주지 않아도 데울 수 있었을 것이다. 어떤 원리로 음식이 데워지는가? 이에 대한 지식이 있는 사람이라면 대답할 수도 있다. 마이크로파를 이용해 데웠다. 그럼 마이크로파를 쬐면 왜 데워지는가? 마이크로파가 음식물에 있는 물 분자에 흡수되면, 물..
컴퓨터는 계산을 위해 태어났다. 복잡한 계산을 위해선 값과, 값을 저장할 수 있는 기능이 필요했다. 컴퓨터가 다룰 수 있는 값은 본질적으로 010101과 같은 숫자로 이루어져 있어야 하는데, 인간의 편의를 위해 단순 정수 말고도 좀 더 다양한 형식의 자료들을 연산할 필요가 있었다. 그래서 이진수로 다양한 값의 종류를 표현했는데, data의 type에 따라 저장될 공간의 크기와 형식이 다르게 되었다. 이러한 자료의 형태를 자료형이라고 부른다. 이러한 자료형은 크게 기본형과 참조형으로 나뉘게 되는데, 기본형은 말 그대로 컴퓨터가 표현할 수 있는 문자, 정수, 실수 등의 기본적인 data type이고 참조형은 내가 저장하고 싶은 데이터의 주소값을 가지고 있는 type이다. 자바에서는 보통 객체의 인스턴스가 저..
목차 knapsack 문제는 무게 제한이 있는 가방에, 무게 제한을 지키면서도 배낭에 담긴 물건의 가격의 합이 가장 큰 경우를 알아내는 문제이다. 이런 배낭 문제를 푸는 다양한 방법을 소개할 것이다. 그리디한 방식과 그 한계 일반적인 동적 계획법과 개선된 버전 backtracking - dfs 그리고 BFS를 이용한 분기 한정법 (dfs 보다 더 나을게 없다.) 이를 개선한 Best First Search를 이용한 분기 한정법! 이렇게 5가지 방식을 소개할 것이다. 1. 배낭 문제와 그리디한 풀이 knapsack 문제는 배낭에 물건을 채우는 문제이다. 보통 물건들의 무게와 그 가격이 정해져 있는 상황이 주어지고, 최대 이득이 되는 만큼 물건을 채워야 하는 문제이다. 배낭은 감당할 수 있는 무게의 상한이 ..
람다와 스트림은 원리를 모른 채 사용되는 경우가 많다. 인텔리제이 자동완성, Chat GPT와 코파일럿의 도움을 받는다면, 사실 개념조차 몰라도 사용할 수 있다.그런데 내가 그걸 왜? 알아야? 하지? 라고, 생각할 수도 있다. 몰라도 된다. 몰라도 코드를 작성하는 데 아무런 문제도 없고 Stream을 활용한 코드도 작성할 수 있다. (물론 주의할 점들은 있다)하지만 왜 Java 진영에서 기존 패러다임인 객체지향에 다른 패러다임을 얹는 고생을 감수했고, 이 기술을 추가한데엔 다 이유가 있다. 람다와 스트림을 잘 알고, 잘 활용할 수록 당신은.. 1. 큰 컬렉션을 "잘" 다룰 수 있다.2. 더욱 유연하고 읽기 좋은 코드를 작성할 수 있다.3. 상황에 따라 성능적인 이득을 볼 수 있다. 스트림의 수많은 기능..