기본 콘텐츠로 건너뛰기

7월, 2015의 게시물 표시

chap 14. 패턴매칭과 케이스클래스

1. switch-case scala> ch match { | case '+' => 1 | case '-' => - 1 | case _ => 0 | } 스칼라에서 사용하는 switch-case 이다. _ 으로 default 문의 역할을 할 수 있다. break 문이 안보이는게 기본적인 특징이다. 스칼라에서는 match-case를 자바보다는 좀더 자주 사용하는듯하다. 2. 가드 가드를 사용할 수 도 있다. scala> ch match { | case i if i == 1 => "one" | case i if i == 2 => "two" | case _ => "some other number" | } scala> ch match { | case x : Int => x | case s : String => Integer.parseInt(s) | case _ : BigInt => Int.MaxValue | } 그리고 변수를 활용하기도하고, asInstanceOf와 같은 형식으로도 많이 사용한다. switch-case문을 조금더 동적으로, 제네릭하게 사용할 여지가 생긴다. 3. case class 패턴칭매에서 편하기 사용하기 위한 클래스이다.  - new를 사용하지 않고 인스턴스를 생성 가능  - toString, equals, hashCode, copy 메소드 생성 scala> case class Calculator (brand: String , model: String ) defined class Calculator 인스턴스생성 scala> val hp20b = Calculato

get, post 차이

HTTP 메소드중에 가장 많이는 방식은 get과 post일듯 하다 이둘은 비교도 참 많이 당한다. 대강 살펴보면, get은 url이 보이고, post는 숨기는 방식 민간함데이터를 전달할 시에는 보안상 post방식이 좀더 현명한 선택인듯하다. 여기 까지가 깊게 생각안해봤던 내가 할 수 있는 대답.. ㅎ 그래서 오늘은 조금 더 살짝 들어가서 몇가지 더 차이점을 정리하려고 한다. 다행히  w3schools   정리가 되어있었다. 들여다보면 우선, get방식은 url에 파라미터가 보인다 . 이로인해 다음과 같은 결과가 초래할수 있다. 1. 브라우저캐싱 2. 즐겨찾기에추가 3. 브라우저히스토리에 저장 4. 글자길이제한(url 최대길이 2048 char) url로 전달하는것과 form을 만들어서 전달하는것 역시 차이 가있다. 1. post방식은 form을 binary 형태로 전달 한다. 2. url은 application/x-www-form-urlencoded 타입에 제한되지만 post는 파일전송을 위한 multipart/form-data 도 제공한다. 3. url은 ascii 방식, post는 바이너리 방식 4. post는 body태그안에 form을 만들어야 하므로 url을 직접던지는 방식보다 조금 느릴 수 있다. 결론적으로 암호와 같은 민감한 정보들은 되도록이면 post방식으로해야하고, 트래픽이 엄청많은 곳에서 단순정보조회같은것들은 get방식으로하면 되지싶다. Compare GET vs. POST The following table compares the two HTTP methods: GET and POST. GET POST BACK button/Reload Harmless Data will be re-submitted (the browser should alert the user that the data are about to be re-submitted) Bookmarked Can be

chap13 콜렉션 (Collections)

1. 콜렉션 계층도 scala의 콜렉션 계층도는 이렇다. 크게, set,map,seq http://docs.scala-lang.org/tutorials/FAQ/collections.html 2. 수정가능한 콜렉션과 수정불가능한 콜렉션  앞의 Map 을 다룰때 한번 나왔었다, immutable, mutable한 Map  수정불가능한것은 값이 변하지 않으니 안전하게 참조할 수 있어 좋다.  스칼라에서는 별도 명시가 없을 경우 immutable 한 경우로 취급한다. 3. 시퀀스  Vector는 Arraybuffer의 수정불가능한 버전, 각노드가 32개까지 자식을 가질 수 있는 트리로 구현된다. 백만개의 원소가 있는 벡터는 4개의 노드 레이어가 필요(10의6승 ~ 32의4승) 그래서 4번만의 접근이 가능.  Range는 시퀀스의 모든값을 저장하지 않는다. 시작, 종료, 증가분만 저장, to, until 메소드로 생성된다. 4. 리스트 scala> val digits = List(4,2) digits: List [ Int ] = List ( 4 , 2 ) scala> digits.head res0: Int = 4 scala> digits.tail res1: List [ Int ] = List ( 2 ) scala> digits.tail.head res2: Int = 2 :: 연산자로 리스트 멤버를 추가 scala> 9 :: digits res4: List [ Int ] = List ( 9 , 4 , 2 ) List에서 원소들을 방문할때 이터레이터를 사용하지만 스칼라에서는 재귀를 사용하는게 자연스럽다 scala> def sum (lst: List [ Int ]): Int = | if (lst== Nil ) 0 else lst.head + sum(lst.tail) sum: (lst: List [ Int ]) Int scala> sum(digits)

html 이미지 로드 실패시 사용할 디폴트 이미지

초간단 개꿀팁. 이걸 여지껏 모르고있었다니, 씁쓸할뿐. < img   src= "image.gif"   onerror= "myFunction()" > 코드만 봐도 감오시쥬? ㅋ img태그의 src링크를 가져오는게 정상적으로 되지 않을때, onerror 로 대신 동작을 정의 할 수 있다. 크롬,ie,파폭,사파리 전부지원. onerror에서 함수로 처리해도 되고, 바로 디폴트 이미지를 걸고 싶으면 < img   src= "image.gif"   onerror= "javascript:src={url}" > 이렇게 할 수 있다. 참고  http://www.w3schools.com/jsref/event_onerror.asp