본문 바로가기

CS

(22)
Go Lang - Package ~ Interface Package golang 표준패키지는 golang.org/pkg 참조 package를 새로 만드는 것을 기준으로 설명하겠다. package를 공유 라이브러리로 만들 때에는 main패키지나 main 함수를 사용해서는 안된다. go compiler가 그것을 시작점 (entry point)라고 여겨 공유 라이브러리가 아닌 실행 프로그램으로 만들기 때문이다. main은 제끼고,,, 우리는 programmer이라는 이름의 package를 만들어 보자. 먼저 programmer이라는 이름의 폴더를 만들어야 한다. 그리고 이 안에 들어간 파일들 이름은 뭐 여러가지가 있겠지... 그래서 다음과 같은 파일구조를 가진다고 하자. ./programmer ㄴ coding.go ㄴ caffeine.go ㄴ cry.go 그러면..
Go Lang - Function 한 번에 묶어 정리하려다가 function 이것저것 할 말이 많아서 따로 정리한다ㅏ. Function go에서 함수는 func 키워드를 사용하여 정리한다. 호출되는 함수가 반드시 호출하는 함수의 앞에서 정의되어야 할 필요는 없다. 포인터가 있는 곳에 reference가 있는 법 Go에서도 함수에 인자를 전달하는 방법이 Pass by Value와 Pass by Ref 로 나뉜다. 늘 그렇듯이 Pass By Value는 인자의 값을 복사하여 함수에 전달하고, Pass By Reference는 인자가 저장된 주소값을 가져와서 dereference하여 사용한다. 다른 언어에선 모르겠지만, C++과 확연하게 다른 점이 함수파트에서 극명하게 드러난다. Variadic Function (가변인자함수) 함수에 정해진 ..
Go Lang - 기초 문법 정리 아 이거 새로 카테고리 만들까? 일단 etc에 놔두고 나중에 옮기던가 해야겠다. 무슨 게시물을 쓰든 잡담으로 시작하는 내 블로그,,, 오늘도 게으른 나를 붙잡아주는 멋쟁이 덕분에 어쩌다가 Go Lang Study를 시작하게 되었다. 이거 한다고 내가 당장 Go 전문가가 되는 건 아니니까 나중에 Go를 따로 공부한다고 하면 도움이 될 것 같다. 일단 기초 문법부터 후루룩 훑었는데, 뭔가 이것저것 짬뽕된 느낌도 있고 새로운 느낌도 있고 그렇네요! 유구한 C++ 바보라 C++과 자꾸 비교하게 되는 점 이해해주셍요 C++ 잘 하지도 못하면서 맨날 왜 그러는지 모르겠당,,, 약간 처음 본 사람을 `엄마로 여기는 아기오리 느낌,,,ㅋㅋ Intro Go는 구글에서 개발한 언어이다. 나중에 이 팀에서도 일해보고 싶다는..
Conventional Commits Commit message에도 널리 사용되는 규정이 있다는 건 몰랐다. 나중에 유용할 수 있으니 일단 가져와서 읽어봐야지 https://www.conventionalcommits.org/ko/v1.0.0/ Conventional Commits 커밋 메세지에 사용자와 기계 모두가 이해할 수 있는 의미를 부여하기 위한 스펙 www.conventionalcommits.org
Java FP 5. Monads Monads A structure that puts a value in a computational context. 이것도 제대로 된 개념은 아니다. 수학적으로 어려운 개념이라 한 줄로 딱 정의하기가 어렵다고 한다. 나는 일단, 객체이면서 content가 있을지 없을지 모르는 상태까지 포함하는 개념이라고 이해하도록 하겠다. Monads에는 unit과 bind의 역할을 하는 함수들이 있는데 대충 어떤 건지는 예시를 보면 알 수 있다. stepik에서도 여기서 설명은 안할거니까 너가 구글링해서 찾아봐~! 라고 한다. Java에서 Monads의 역할을 하는 것에는 Optional과 Stream이 있다. Stream은 전에 했던거니까 Optional만 가져온다. Optional Optional encapsula..
Java FP 4. Currying Currying a technique of translating the evaluation of a function that takes multiple parameters into evaluating a sequence of functions, each with a single parameter. 그러니까 currying은 여러개의 인자를 받는 함수를 하나의 인자를 사용하는 함수 여러개로 바꾸는 것이다. 즉, doSomething(1, “Hello”, true) 대신에 doSomething(1)(“Hello”)(true)처럼 하는것! 이렇게 하면 함수를 재사용할 수도 있고, 여러 파라미터를 한 번에 다 받지 않고 몇 개만 받아서 함수의 실행을 늦출 수 있다. (사실 재사용 빼고 후자는 뭐가 장점인지 모르..
Java FP 3. Streams Stream! 겁나 쉬운줄 알았는데 역시나 object 개념들어가니까 바로 적용 못하고~ 개념같은 건 구글링하면 나오니까 헷갈리는 것만 오답노트 시작! 맨 처음에 바보같이 filter와 map을 헷갈려했는데, - filter는 stream에서 조건에 맞는 것들만 살려두는 것 - map은 stream에서 모든 element들에 대해 명령을 실행하는 것 완전 다른 거라 헷갈릴 이유가 없다! Use Stream.range() or Stream.rangeClosed(). Method rangeClosed() includes an upper bound. LongStream rangedStream = LongStream.rangeClosed(100_000, 1_000_000); Map과 reduce는 용법이 다양하..
Java FP 2. Functions are objects Functional Interface Interface with a single abstract method (aside from the methods of Object). @FunctionalInterface public interface Fun { R apply(T t); static void doNothingStatic() { } default void doNothingByDefault() { } } 기본형은 위와 같다. 무조건 하나의 method만을 갖고 있으며, @FunctionalInterface 라고 선언해줄시 method의 개수를 검사해서 1개가 아닐경우 오류를 반환해준다. 이렇게 선언해주는 건 필수는 아니다. 근데 좀 헷갈리는게,, 하나의 method만을 가질 수 있지만 위와 같이 def..