본문 바로가기

개발

(38)
「그림으로 공부하는 IT 인프라 구조 」후기 https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=257114341 그림으로 공부하는 IT 인프라 구조 시스템이 동작하기 위한 토대인 ‘IT 인프라’ 구조에 관해 설명하고 있는 책. 이 책의 저자들은 현장에서 인프라 구축을 담당했던 컨설턴트들이다. 다양한 환경에서 체득한 인프라 기술의 핵심 www.aladin.co.kr 가볍게 훑는 책인줄 알았는데 생각보다 꼼꼼하다. 그리고 공부를 확장할 수 있는 그 단서를 제공한다. IT 인프라에 대해 훑는 용도로 굉장히 적합한 책이다. 왜냐하면 마냥 어렵지도 않고 마냥 쉽지도 않기 때문이다. 쉬운 내용은 술술 넘어가는데 다소 난이도가 있는 내용은 두어번 책을 뒤적거려야 한다. 호기심을 유발하기 때문에 더 좋다. 강추강추 그림이..
[Scala] 스칼라는 예외를 이용하지 않고 오류를 처리한다. 스칼라도 예외 처리가 없진 않다. 아래의 예시처럼 try catch 문도 존재한다. def main(args: Array[String]): Unit = { def falling(i:Int): Int = { val y: Int = throw new Exception("THREAD") try { val x = 42 + 5 x + y } catch { case e: Exception => 43 } } falling(3) println("이러면 에러가 발생한다.") } 그런데 참조에 투명하지 않다. 참조 투명성을 가지려면 문맥에 의존하지 않아야하는데 위의 코드는 try 블록에 속해있는지, 속해있다면 어느 try 블럭에 속해있는지에 따라 결과가 달라진다. 즉, 치환모형의 간단한 추론이 불가능해지고, 형식에 안전하..
[Scala] 다형성 [T]는 컴파일 타임에 사라진다. 스칼라는 다형성을 지원한다. def testFunction[T] (i: T): T = ??? 위의 함수는 i에 오는 타입에 따라 리턴 타입도 결정된다. 그런데 이런 Type 은 Compile Time에 모두 사라진다. 즉, 컴파일러에게 힌트만 주는 것이지 runtime때는 아무 효력이 없다.
[Scala] if true 1 else false 의 타입은 뭘까? scala> if (true) 1 else false val res0: AnyVal = 1 놀랍게도 AnyVal이다. AnyVal은 1:Int와 false:Boolean의 공통 조상이다. 이렇게 생각할 수 있다. "아니, 뻔하게 리턴값이 1인데 당연히 Int여야하는거 아닌가?" 저 문장에서 컴파일러가 Int로 타입 바인등을 하면 나중에 저 조건문이 바뀔 경우 관련된 모든 함수를 수정해야한다. 즉 프로그램의 안정성을 해친다. 그래서 가장 상위타입으로 타입바인딩 한다.
[Scala] Call-by-value 와 Call-by-name Call by value는 매개변수에 대한 계산을 끝낸 후 함수로 진입하고 Call by name은 함수 내에서 매개변수가 쓰일 때 비로소 계산을 시작합니다. // a와 b를 받아서 a를 return 하는 함수입니다. def test(a:Int, b:loop) = a // Call-by-Value : b에 대한 계산이 끝나지 않기 때문에 return을 돌려주지 않습니다. def test(a:Int, b:loop) = a // Call-by-Name : b는 함수 내부에서 쓰이지 않기 때문에 a를 돌려줍니다. def test(a:Int, b:loop) = a 스칼라는 대부분의 경우 Call-by-Value를 사용하지만, 함수가 일급 객체로서 매개변수로 넘어갈 때는 Call-by-Name을 사용합니다. 함수..
[Scala] lazy val을 써야하는 경우 val는 변수가 선언될 당시 실행되고 lazy val은 해당 변수에 접근할 때 실행된다. def factorial(n:Int):Unit = { val cc = bb(n,1) def bb(n:Int, acc:Int): Int = { if (true) 5 else 3 } } 다음과 같이 선언하면 forward reference extends over definition of value cc 이런 에러 메시지를 볼 수 있다. val cc를 lazy val cc로 교체하면 컴파일은 성공한다. def factorial(n:Int):Unit = { lazy val cc = bb(n,1) def bb(n:Int, acc:Int): Int = { if (true) 5 else 3 } } 그렇다면 다음과 같은 코드는 어..
[Scala] 순수함수와 참조투명성, 치환모형 순수함수 : 부수 효과가 없는 것 부수효과 : 함수 외부세계와의 일정한 상호작용이 있는것 class Gift { def buyGift(cash:Cash) : MacBook = { val MacBook = new Mac() cash.charge(MacBook.price) // 외부세계와의 상호작용이 있다. MacBook } } 참조투명성: 만일 모든 프로그램 p에 대해 표현식 e의 모든 출현을 e의 평가 결과로 치환해도 p의 의미에 아무 영향도 없다면 그 표현식 e는 참조 투명성이 있다. 그리고 이 참조에 투명한 모든 x에 대해 f(x)가 참조에 투명하면 함수 f는 순수하다. 예를 들어 '덧셈연산'은 순수함수다. 2 + 3 = 5 라는 표현식에 대해 프로그램 전체에 산재되어있는 2+3을 5로 바꿔도 프로그..
[Scala] 함수 컴비네이터 컴비네이터란? 컬렉션을 변형한 후 동일한 자료형의 컬렉션을 반환하는 메소드 map(), foreach() map()은 function을 이용해서 해당 컬렉션의 원소들을 변형시킨 후 새롭게 컬렉션을 만들어서 반환한다. val list = List(2,4,6) val minus_list = list.map(elem => elem - 1) println(list) // Output : List(2,4,6) println(minus_list) // Output : List(1,3,5)foreach()는 map()과 마찬가지로 함수를 이용하지만 반환값이 없다. var list = List(2,4,6) list.foreach(elem => println(elem)) // Output // 2 // 4 // 6fil..
2021 카카오 블라인드 공채 - 카카오 엔터프라이즈 후기 2021 카카오 블라인드 공채에 합격한 후기를 올리려 합니다. 아직도 믿기지 않네요. 평소 감정 변화가 적은 편인데도, (1) 가고싶은 회사에 합격했다는 것 (2) 블라인드 공채였다는 것. 이 두가지가 저를 정말 행복하게 합니다. 간절한 마음으로, 쉽지 않은 삶을 살아온 그대에게 도움이 되는 글이길 바랍니다. (경쟁률도 엄청 높았네요 지금 보니까...) 자기소개서 서울 4년제 대학 4학년 2학기 컴퓨터공학이 본전공은 아닙니다. 학점 3점 중반대 프로젝트 경험 SDP Verification Tool : 국제기구로부터 수주받은, 데이터 납품 업무를 처리할 때 도움을 주는 Admin Page SDP Project Mapping : 위 프로젝트를 통해 구축한 고유한 DB를 지도 위에 시각화하는 프로젝트 농인을 ..
생애 첫 오픈 소스 풀 리퀘스트! 오픈 소스에 대한 로망이 있다. 다른 사람과 내것을 나누고 함께 발전하는 자체가 멋지기 때문이다. 게다가 너드를 좋아하고 동경하는데 리누스 토발즈는 Real Nerd다. https://www.youtube.com/watch?v=o8NPllzkFhE&t=2s Most Sexy Nerd... named "Linus Torvalds" https://github.com/torvalds torvalds - Overview torvalds has 6 repositories available. Follow their code on GitHub. github.com 오픈소스에 참여하고 싶다는 생각을 해서 Eslint를 비롯해서 이것저것 기웃거렸는데 내게는 벽이 높아보였다...bb 그래서 '언젠가 해야지' 라며 미루고 ..