본문 바로가기

Programing/JVM(Java, Kotlin)

(96)
[Java] Inner clsss의 접근 범위 네이버 카페에 다음과 같은 질문이 올라왔다. 코드는 아래와 같다. 아래 처럼 밖의 클래스(Outer)안의 메서드에 정의된 내부 클래스를 지역 내부 클래스(Local inner class)라고 부른다. public class Outer { private int a = 1; private static int b = 2; public void method1() { int c = 3; class Inner { public void method2() { System.out.println("sum: " + (a + b + c)); } } Inner i = new Inner(); i.method2(); } public static void main(String[] args) { Outer O = new Outer()..
[Java] 통화 표준 및 통화코드 그리고 Currency 클래스 결제 관련 개발을 하면서 410이라는 코드를 많이 접하게 되었다. 비단 한 PG 뿐만 아니라 광범위하게 사용되고 있음을 알게 되었다. 간단한 구글링으로 410 이라는 코드는 ISO 4217에 있는 숫자형태의 통화 코드라는 것을 알게 되었다. ISO 표준문서는 돈내야 열람 가능하지만 테이블 형태는 그냥 조회가 된다. Current currency & funds code list Currency 클래스에는 통화 관련 정보를 조회하는 로직과 구조이지 실제 데이터는 lib 디렉터리 하위에 currency.data 라는 바이너리 파일에 저장되어 있다. JDK 1.8이 설치되어 있는 mac OS의 경우는 아래 디렉토리에 있다. /Library/Java/JavaVirtualMachines/jdk1.8.0_181.jd..
[Java] Class 생성 실험 자바에서 클래스란 매우 기본적인 지식이다. 카페에서 질문을 보고 한 .java 파일에 여러 클래스를 넣은 것을 보고 궁금해져서 실험을 해보았다. 평상시에서는 하나의 .java 파일에는 하나의 클래스, 혹은 중첩된 클래스(nested class)를 사용하기 때문에 이런 경험을 할 일이 없었기 때문이다. 1. 하나의 .java 파일에는 public 클래스 하나만 가능하다. 아래와 같이 두 public 클래스가 있다고 하자. 다음과 같이 에러가 발생한다. 2. public이 아닌 클래스는 여러 개가 가능하다. 1번의 해결책: ClassAnother를 public이 아니게 만든다. 3. package 스코프(default)는 여러개가 가능하다. Java 파일 이름의 클래스도 public 을 없애는 것이 가능하다..
[Java] switch와 String 그리고 바이트코드 제목이 거창하다.사실 카페에서 본 질문에 댓글을 달다가 공부한 것을 정리하는 것이다. 질문은 아래와 같다.- 질문 제목 : switch에서 charAt사용 차이 - 질문 내용 :아래 두 코딩에 차이점이 뭔가요?? 처음에 charAt를 사용하지 않고 해보다가 저렇게해도 결과가 나오긴 했는데 charAt를 사용하라고 하셔서 사용한 것으로 바꾸긴 했는데 차이점이 뭔지 궁금합니다! 둘다 결과가 제대로 나오긴합니다. 차이왼쪽의 경우 char 타입으로 switch 안에서 분기를 하고 있고, 오른쪽은 String 타입으로 하고 있다. 변수명이 대문자로 시작하는 것이 거슬릴 수 있으나 초심자의 코드라고 생각하고 넘어가자. 그러면 이런 차이는 어떤 결과를 가져오게 되는가? 바이트 코드 관점 (TABLESWITCH / L..
[JVM] currentTimeMillis vs nanoTime Why회의 시간에 Ummm님이 currentTimeMillis 보다는 성능상 nanoTime을 쓰는 것이 좋다고 하셔서 찾아보게 되었다.예전에 이상민님의 자바 성능 개발자가 반드시 알아야 할 자바 성능 튜닝 이야기에 비슷한 내용이 있었던 것 같은데 너무 오래 전에 읽어서 기억이 나지 않는다. 선 검색검색해보면 Baeldung.com 에는 Measure Elapsed Time in Java 라는 제목으로 글이 있다.System.currentTimeMillis의 경우는 wall-clock time이라서 시스템의 시간을 바꾼다거나 외부적인 요인에 의해 시간 점프가 발생할 수 있다고 한다.nanoTime의 경우 system or wall-clock time에 대한 언급이 따로 없다고 한다. 용어Wall cloc..
[Java] break label 문 이번에 자바 기초를 다시 랩업 하는 차원에서 20년만에 자바책을 하나를 끝냈다.제목은 카이호스트만의 "Core Java SE 9 for the Impatient"라는 책이다. 한국에는 "가장 빨리 만나는 코어 자바 9"라는 제목으로 번역이 되었다. 저자는 자바 마스터라는 칭호답게 자바의 기초를 포함하여 자바 프레임워크에 대해 은연 중에 설명을 한다.(아참 책에 대한 리뷰를 쓰려던 것이 아니지..) 각설하고, Java 를 한지 20년이 되었는데 처음으로 break 레이블 형태를 알게되었다. 처음 봤을 때는 C언어의 GOTO 문이 생각났다.반복문이 여러 레벨로 중첩이 되어 있어야 하는데 이럴 때 탈출을 쉽게 도와주는 방식이다. 자바 프레임워크에서도 실제 사용한 케이스가 있어서 글을 쓰게 되어싿. 아마 자바를..
[Java] Generic in depth 2004년 JSR 176 규격에 의해 규정된 J2SE 5.0부터 자바에 제네릭(Generic)이라는 개념이 JSR 14로 추가되었다. 또한 많은 사람들이 Generic 타입이 추가 된 것을 5.0의 큰 변화로 꼽는다. 그런데 자바 카페나 블로그에 올라온 글들을 보면 근거 없는 정보들이 있어 확인이 필요했다. 1. 타입 이름은 아무 의미가 없다? 이 주장과 아래 2번 주장은 'justkukaro님의블로그'에서 발견했다. 위의 주장은 문법상으로는 맞는 말이다. 하지만 일상 생활을 비유로 들자면 우리는 법만 지키고 살면된다라는 말과 다를 바가 없다. 이 법이라는 것은 도덕이라는 개념과 대치되는 개념으로 사용되었다. 만약 (도덕이라는 다른 범주를 무시하고) 법만 지키면서 살면 힘든 세상이 될 것이다. 일상 생활..
Spock Framework 프로젝트에 추가하기 jUnit이 유명하지만 사용하기에는 Spock Framework이 더 편한 것 같다. src 하위에 main과 test가 있고, test 밑에 java가 있을 것이다. test 밑에 groovy 디렉토리를 추가한다. groovy 디렉토리가 그냥 회색인데 녹색이 되어야 테스트 디렉토리라고 IDE가 인식이 된 것이다. 아래 build.gradle 파일에서 apply plugin: 'groovy' 를 추가하면 녹색으로 바뀔 것이다. build.gradle 파일apply plugin: 'groovy' dependencies { testCompile ("org.spockframework:spock-core:1.1-groovy-2.4") { exclude module: "groovy-all" } } 2018-10-..