본문 바로가기

Programing/자바

(46)
[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 라는 제목으로 글이 있다.currentTimeMillis의 경우는 wall-clock time이라서 시스템의 시간을 바꾼다거나 외부적인 요인에 의해 시간 점프가 발생할 수 있다고 한다.nanoTime의 경우 system or wall-clock time에 대한 언급이 따로 없다고 한다. 용어Wall clock: 현실 세..
[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-..
[Java8] Optional.of 쓸 때 주의할 점... Optional 사용시 NULL이 가능한 값에 아래와 같이 사용하면 제대로 동작하지 않을 수 있다. // Exception e...final Optional message = Optional.of(e.getMessage());MyException exception = new MyException(message.orElse("문제가 있습니다!"), getReturnUrl(gotoUrl)); 원래 의도는 메세지를 가져왔을 때 없으면 기본 메세지를 orElse 를 통해 우아하게(?) 사용하려고 하는 의도일 것이다. 하지만, java.util.Optional#of 의 경우 아래와 같이 시그너쳐가 되어 있다./** * Returns an {@code Optional} with the specified presen..
을/를, 이/가, 은/는 을 알아서 붙여주면 좋겠다. 포켓몬을 보다 보면 조사가 옵션처럼 붙어서 뭔가 아마추어 처럼 보이는 느낌이 있다.바로 한글의 특성 때문인데 이것을 구현하기 쉬울 거라고 생각했는데 나름 생각할게 더 있었다. 자바 코드/** * 한글코드 값은 아래 주소를 참고한다. * http://jrgraphix.net/r/Unicode/AC00-D7AF * * 로직에 대한 이해는 아래 주소를 참고한다. * http://gun0912.tistory.com/65 * * 속기에 대한 글을 참고하면 좋다. * http://blog.naver.com/blue8943/220227426526 */ @Slf4j public class StringUtils { /** '가'의 한글코드 값(시작) */ private static final int HANGULE_SYL..