본문 바로가기

All

Java의 바이트코드 실행 방식 자바 바이트코드는 기계가 바로 실행할 수 있는 언어보다는 비교적 인간이 보기 편한 형태로 기술됐다. 그래서 실행 엔진은 이와 같은 바이트코드를 실제로 JVM 내부에서 기계가 바로 실행할 수 있는 형태로 변경한다. - 인터프리터 : 바이트코드 명령어를 하나씩 읽어서 해석하고 실행한다. 하나하나의 해석은 빠른 대신 인터프리팅 결과의 실행은 느리다는 단점이 있다. 즉, 바이트코드라는 '언어'는 기본적으로 인터프리터 방식으로 동작한다. - JIT(just-in-time) 컴파일러 : 인터프리터의 단점을 보완하기 위해 도입된 것이 JIT 컴파일러다. 인터프리터 방식으로 실행하다가 적절한 시점에 바이트코드 전체를 네이티브 코드로 변경하고, 이후에는 해당 메서드를 네이티브 코드로 직접 실행하는 방식이다. 네이티브 코.. 더보기
[Play Framework] 2.3버전 설치 및 프로젝트 생성 오랜만에 Play Framework를 한번 해보려고 공식 홈페이지에 들어갔다. https://www.playframework.com 확인해보니 2.3.8 버전까지 업데이트를 하였다.이제 설치할 준비를 하고..... 파일은 다운받으니.. 아래와 같이 3개의 파일만 있다. activactor를 실행시키니 알아서 뭔가를 많이 다운받는다.... 그리고 아래와 같이 Play Server가 실행이 되고........ 웹 페이지를 통해 activactor라는 사이트?? 에 접속하고 프로젝트 생성부터 다 해준다.!!! 간단하게 프로젝트를 생성하고 빨간색 부분을 클릭하면 아래와 같은 버튼을 볼 수 있게 되는데 IDE변환까지 알아서 다해준다..!!! 정말 개발하기 편해졌다. 더보기
iOS Touch ID Login iOS에서 Touch ID 하는 코드이다 사용하기 간단하다.~! NSString *loginDialogMessage = @"TouchID Login"; LAContext *context = [[LAContext alloc] init]; NSError *authError = nil; if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics error:&authError]) { [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics localizedReason:loginDialogMessage reply:^(BOOL success, NSError *er.. 더보기
Xcode에서 ineligible device로 될떄.... iOS 8.3버전과 Xcode 6.3 업데이트 이후 갑자기 ineligible device라고 하면서 선택이 되지 않았다..... 버그인가?... 싶기도하고... (http://zachwaugh.me/posts/fixing-xcode-6-3-beta/) 해결 방법은... 아래와 같이 선택하면 된다.!! 더보기
Find Bug Eclipse에서 버그가 우려되는 부분을 찾아주는 Plug-in이다.~~ ㅎㅎ 마켓에 들어가서~!! findBugs를 찾자~~ 설치를 완료하나면 내가 버그가 있는지 살펴보고 싶은 코드에서 오른쪽 키를 누르면......아래와 같이 Find Bugs가 나오고 여기서 Finds Bugs를 누른다.!! 검색을 하면 아래와 같이 버그 유발 코드를 찾아준다. 그리고 왜 버그인지 이유도 설명해준다. 더보기
PS4 + PSVita 리모트 플레이 파이널 판타지 15를 기다리면서 시간 때울 겸 구매한 PS Vita!!! 우선 PS4 에서 리모트 플레이 설정을 한다.~!!! 그리고 PS Vita도 마찬가지로 PS4 링크를 시작~! 리모트 플레이를 선택한다. 그럼 서로 맞추기 위해서 숫자를 입력하라고 한다. 입력이 완료 되면 리모트 플레이가 자동적으로 시작이 된다. 파이널 판타지 영식 시연 사진~!!! 화질도 좋고 밖에서 충분히 재미있게 할 수 있을 것 같다.~!! 더보기
PS4 화이트 + 파이널판타지 영식 파이널판타지 영식의 출시와 함께 PS4를 구입하려 갔다. (원래는 파이널판타지15를 기다렸지만.....) PS4 와 파이널판타지 영식~!!!! 파이널 판타지 15 체험판 코드가 있다.~!!!! 드디어 개봉~!!! 화이트 이쁘다~!!! PS3보다 더 이뻐진 듯~! 듀얼쇼크도~!!! ㅎㅎㅎ 그 외에 구성품.. Hdmi 케이블, 전원, 이어폰, 그리고 듀얼쇼크 충전과 연결을 위한 USB 단자 PS3 모델과 비교~!!! 크기차이가... ㅎㅎㅎㅎ 두깨도 엄청 얇다 약 2배정도.. 이제 PS3 자리에서 PS4로 바꾸고... 전원 ON을 하니 LED에서 불빛이 들어온다.~!! 파란색~!! 파란색만 나오는 줄 알았는데 다양한 색이 나오는듯?? 듀얼쇼크도 마찬가지로.... 이제 설정을 하고..... 이제 게임을 시작~!.. 더보기
[Scala] Local Type Inference 스칼라는 Java랑 다르게 알아서 타입을 추론이 가능하다~!!!! 하지만 막무가내로 되는게 아니라 조금은 안정하게??설계를 한듯하다. 하나씩 예시를 살펴보자~! 첫번째 예시는 코드로 파악이 가능하다. object InferenceTest1 extends App { val x = 1 + 2 * 3 // the type of x is Int val y = x.toString() // the type of y is String def succ(x: Int) = x + 1 // method succ returns Int values} 두번째 예시는 함수에 리턴타입을 정의하지 않았다. 그리고 재귀호출이라서 컴파일에서 오류를 발생시킨다. object InferenceTest2 { def fac(n: Int) = i.. 더보기
[Scala] Explicitly Typed Self References 자기 자신을 다른 Type으로 선언이 가능하다. 예시를 보자 Graph라는 클래스와 abstract class Graph { type Edge type Node def connectWith(node: Node): Edge = { val edge = newEdge(this, node) // now legal edges = edge :: edges edge } } ...} 더보기
[Scala] Lower Type Bounds 아래의 예시를 보면 LinkedList를 구현하였다. 하지만 ListNode[String]이라고 선언하면 ListNode[Object]를 사용할 수 없게 되는 상황이 나온다. case class ListNode[T](h: T, t: ListNode[T]) { def head: T = h def tail: ListNode[T] = t def prepend(elem: T): ListNode[T] = ListNode(elem, this)} 조금 더 규칙을 허술하게 하고 싶을때 ?? 사용하면 좋다. prepend 함수에 [U >: T] 라고 해주면 case class ListNode[+T](h: T, t: ListNode[T]) { def head: T = h def tail: ListNode[T] = t de.. 더보기