본문 바로가기

Programing

(403)
[Java] toString에서 나타나는 [, L 등의 문자의 정체는? 간단한 코드이다. 아래의 코드를 수행하면 어떤 글자들이 콘솔에 찍힐까? package com.tistory.namocom.question public class ToStringTest { public static void main(String[] args) { Object object = new Object(); Object[] objects = new Object[1]; System.out.println(object); System.out.println(objects); } } 아래의 결과를 보기 전에 미리 생각해보자. 더보기 java.lang.Object@6576fe71 [Ljava.lang.Object;@76fb509a 생각했던 것과 일치했을까? System.out.println 왜 이런 글자들이 ..
[Java] String: literal vs new 자바 기초중에 하나이다. 자바에는 문자열을 생성하는 방법이 크게 두가지가 있다. 리터럴(literal) 방식이고 다른 하나는 new 생성자를 이용한 방법이다. 코드로 설명하는 것이 이해가 빠를 것 같다. String str1 = "a"; String str2 = new String("a"); str1 이 리터럴 방식이고, str2 가 생성자를 이용한 방식이다. 퀴즈. 둘 중에 안티패턴은? 답부터 이야기하면 바로 생성자를 이용한 방식이다. 왜 그런지는 아래에서 살펴 볼 수 있다. String Internal 위의 자바코드를 읽을 수 있는 바이트 코드로 나타내보면 아래와 같다. ldc "a" astore_1 new java/lang/String dup ldc "a" invokespecial java/lang..
[Java] hashCode() internal : String, Object 질문: String 간 비교시 헸길리는 부분이있어서 질문 드립니다. String a = "a"; String b = new String("a"); 이와 같은 케이스는 주소가 다르게 생성되던데 이런 케이스 때문에 무조건 equals()메소드로 비교하는것인가요?? 답변부탁드립니다. 질문에 대한 답부터 하면 "맞다."이다. 하지만 이 글을 쓰게 된 이유에는 '주소'라는 말이 있었기 때문이다. 혹시 주소가 hashCode() 돌려주는 값을 의미했는지 물어보니 그렇다고 한다. String 클래스의 hashCode (보통) String 클래스의 hashCode() 는 Object의 hashCode()를 사용하지 않고 오버라이딩해서 구현한다. 버전에 따라 구현 방법은 바뀌었지만 자바 8에서는 public final ..
[Spring] ClientHttpResponse 인터페이스 계층 구조 ClientHttpRequestInterceptor 인터페이스를 통해 로깅을 남기고 있었는데 비표준 Http Status 코드로 인해 개선을 하게 되면서 정리를 하였다. ClientHttpResponse 인터페이스 close()는 며AutoCloseable에 정의한 인터페이스를 재정의한(override) 것이다. 나머지는 이름(상태코드, 숫자형태의 Raw 상태코드, 상태 문자열)의 정보를 획득한다. AbstractClientHttpResponse 추상 클래스 getStatusCode() 를 구현해놓았고 코드는 아래와 같다. public abstract class AbstractClientHttpResponse implements ClientHttpResponse { @Override public Htt..
[Pokayoke] 휴먼에러를 어떻게 막지? 1955년 히터가 넘어졌을 때 자동 소화되는 장치가 개발된 이후 히터에 의한 화재가 급격히 감소 - 집의 스팀보이도 바닥이 떨어지면 전원이 차단되는 센서와 스위치가 있었음 - 1964년 난연 재료로 잠옷이 만들어진 이후 화재에 의한 사망률이 급격히 줄어듦
[Sonarqube] Spring 기본 테스트 기본 템플릿은 아래와 유사한 테스트를 만들어준다. public class ApplicationFunctionalTest { @Autowired private ApplicationContext applicationContext; @Test public void contextLoads() { } } 문제는 sonarqube에서 단정문이 없다고 아래와 같이 경고한다. 간단한 해결책.. 애플리케이션 컨텍스트가 널이 아님을 단정한다. public class ApplicationFunctionalTest { @Autowired private ApplicationContext applicationContext; @Test public void contextLoads() { assertNotNull(applicatio..
[Java] 한 영역(scope)에서 변수를 두 번 선언할 수 없는 이유? 한 카페에 올라왔던 질문이다. 코드 아래의 코드가 왜 동작하지 않는지에 대한 문의이다. public class DuplicationVarDeclare { public static void main(String[] args) { int i = 100; byte b = (byte) i; System.out.println(b); int i = 300; byte b = (byte) i; System.out.println(b); int k = -2; b = (byte) k; System.out.println(b); System.out.println(Integer.toBinaryString(k)); } } 질문내용: 왜 TYPE을 두번 선언하면 안되나요? 예제 2-13을 보면, I와 b는 처음에만 타입 선언이 되어..
[Java] 자바 컴파일러 - parse(파스) 이전에 자바 컴파일러의 컴파일 단계라는 글을 쓴 적이 있다. 사실은 그 컴파일 이전에 구문 분석 트리를 만드는 작업을 수행한다. 이 글은 그 과정에 대해 다룬다. 자바에서는 JSP등에서 Runtime 중 동적 컴파일링을 할 수있는 도구를 제공한다. ToolProvider 라는 서비스 로더를 통해 시스템 자바 컴파일러를 가져올 수 있다. 아래 코드는 자바 컴파일러를 가져오는 문장이다. import javax.tools.JavaCompiler; import javax.tools.ToolProvider; public class JavaCompilerTest { public static void main(String[] args) { final JavaCompiler compiler = ToolProvider...