쓰레드는 작업의 한 단위로, 주로 프로세스에서 사용된다. 프로세스는 공장이고, 쓰레드는 일꾼이라고 많은 사람들이 설명한다. 그런데! 이 설명으론느 뭔가가 부족하다. 공장인거 알겠고, 일꾼인거 알겠는데... 멀티 쓰레드는 어떻게 설명하고..., 싱글 프로세스에서 멀티를 쓰는건 어떻게 설명하지... 그래서 곰곰히 생각했다. 어떻게 하면 쓰레드를 더 잘 이해 할 수 있을까? 순간, TV와 리모콘이 떠올랐다. 여기서 TV는 프로세스고 리모콘이 쓰레드라 생각했다. 그랬더니 쓰레드가 조금씩 이해되기 시작했다. 보통은 TV와 리모콘은 한개씩 존재한다. TV가 여러 대일경우에는 프로세스가 여러개라고 생각하면 되고, 리모콘이 여러개라면 쓰레드가 여럿인, 멀티쓰레드라고 생각하면 되었다. 이제 싱글 프로세스 환경에서 쓰레드..
자바를 공부하면서 어렵다고 느끼는게 뭐냐고 물어보면 가장 먼저 제네릭을 떠올릴 것입니다. 물론 람다도 있긴하지만 람다 같은 경우는 몰라도 API를 읽는데는 그리 문제가 되지 않죠. 왜냐하면 람다가 아닌 버전도 알려주기 때문입니다. 람다를 사용하는 이유가 함수형 처럼 사용하기 위해서인데 자바는 함수형 언어가 아니기 때문이죠.. (하지만 람다도 반드시 알아야 하는 것 중 하나죠) 하지만 제네릭 같은 경우는 다릅니다. 이걸 모르면 API를 읽는데 어려움이 있죠. 근데 제네릭이라는게 쉽게 와닿지가 않습니다. 왜냐하면 이걸 굳이 써야 하는지 의문이 들때가 많기 때문이죠. 그래서 곰곰히 생각했습니다. 어떻게 하면 제네릭을 더 잘 이해할 수 있을까? 일단 제네릭에 대한 뜻을 알아 봅시다. 네 일반적이라는 뜻입니다. ..
*주의 : 이 글은 CODE라는 책을 읽고 영감을 받아 작성한 글입니다. 일반적인 프로그래밍 추상화에 대해서는 설명하지는 않습니다. 저는 프로그래밍 추상화와 다른 추상화에 대한 미묘한 차이를 이해하고자 이 글을 작성하였습니다. 이 글을 읽으면 추상화에 대한 대략적인 감을 익힐 수 있을지는 모르겠지만, 프로그래밍 추상화에 대한 이해는 어려울지도 모릅니다. 프로그래밍을 공부하다 보면 추상화라는 단어가 눈에 많이 들어옵니다. 하지만 이 단어가 쉽게 와닿지가 않습니다. 우리가 흔히 알고 있는 추상화는 다음 과 같은 그림들일 것 입니다. 그렇다면 프로그래밍에서는 어떻게 사용될까요? 흔히 우리가 프로그래밍상에서 알고있는 추상화는 구현체가 없는 메소드입니다. 그런데 위 그림과 프로그래밍에서 말하는 추상화는 전혀 다른..
프로그래밍 공부를 하다보면 얕은 복사와 깊은 복사가 나옵니다. 얕은 복사는 값만 복사하고 주소값은 복사하지 않고 값만 복사입니다. 그리고 깊은 복사는 주소값과 값 둘다 복사하는 방법입니다. 그런데 이건 알겠는데 막상 이것을 설명하려고 하면 무엇이 다른지 햇갈릴때가 많았습니다. 얕은 복사, 깊은 복사 이 두개가 있는 건 알겠는데... 뭐가 다른건지... 코드를 봐도 뭐가 다른건지... 제가 자바를 처음 공부했을때 이랬습니다. 사실 지금부터 설명하는 방법이 프로그래밍적으로 봤을때는 맞지 않을 수 있습니다. 하지만 적어도 이해가 될겁니다. 나중에 프로그래밍에는 뭐가 더 추가 되는지도 설명할 예정입니다. 검정 검정 위 두개의 글자를 읽어 보세요. 두개다 검정이라는 글자를 가지고 있습니다. 이제 두개의 단어는 각..
탬플릿? 뭔가 느낌이 일정한 모형 틀을 만들어 놓고, 그 틀을 계속 사용하는 느낌이다. 구글에서 템플릿 관련 이미지를 찾았다. 죄다 ppt관련 이미지 밖에 없었다. 왜 ppt를 만들때 템플릿을 사용할까? 가장 뻔한 이유로는 편하기 때문이다. 어차피 제목 이나 내용빼고는 이미 구현되었기 때문에 우리는 제목과 내용만 추가하면 된다. 물론 내가 발표할 주제와 ppt의 상관관계는 지켜야 하겠지만... 근데... 디자인 패턴에서는 템플릿을 어떻게 사용할까? 사실 이름에는 메소드라는 단어가 숨겨져 있다. 메소드가 있는 이유는 이 패턴은 메소드의 역할이 크기 때문이다. 예를들어 A라는 클래스와 B라는 클래스를 만든다고 가정하자. 근데 A와 B클래스는 공통적으로 사용되는 메소드가 있다. 이 메소드를 한곳에 넣어주면 된..