본문 바로가기

Programing/JVM(Java, Kotlin)

(94)
[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...
[Java] Effective Java : Item 36 EnumSet, 유스케이스 in Java 8 한국어판: 아이템 36. 비트 필드 대신 EnumSet을 사용하라 (6장) Win32 윈도우 프로그래밍을 해본 사람은 알겠지만 비트 연산의 조합으로 만드는 여러가지 윈도우 API를 많이 사용한다. 예를 들면 AnimateWindow 함수는 3번째 인자(dwFlags)로 비트 연산자 OR(|)로 여러가지 조합된 상태를 입력을 할 수 있다. // WinUser.h #define AW_HOR_POSITIVE 0x00000001 #define AW_HOR_NEGATIVE 0x00000002 #define AW_VER_POSITIVE 0x00000004 #define AW_VER_NEGATIVE 0x00000008 #define AW_CENTER 0x00000010 #define AW_HIDE 0x00010000..
[Java] Stream in depth : Stream & Pipeline 스트림의 내부 구조 및 원리를 확인하다 두서없이 정리해두었다. 스트림의 사용에 대한 내용이라면 자바 기본서에 있는 것을 보는 것이 좋을 것이다. BaseStream 인터페이스 BaseStream 인터페이스는 위의 다이어그램에 적혀있는 메서드들을 가지고 있는 인터페이스이다. try with resource에 유용하게 사용가능한 AutoCloseable 인터페이스를 상속하고 있다. public interface BaseStream extends AutoCloseable 또한 제너릭 인자 두 개를 갖는데 하나는 스트림 원소들의 타입(T)이고 나머지는 BaseStream을 구현하는 또 다른 타입(S)이다. S는 BaseStream - 즉 자기자신을 bounded 하였기 때문에 BaseStream을 상속하고 있는..
[Sonarqube] Functional Interfaces should be as specialised as possible 함수형 인터페이스는 가능하면 스페셜한 놈을 찾아써라... Core Java SE 9 For the impatient (가장 빨리 만나는 코어자바9)책에도 한 페이지지만 분명 언급되어 있었다. (158쪽) 기본 타입 int, long, double에 특화된 함수형 인터페이스 34개... 이것을 사용을 하면 오토박싱을 줄일 수 있어서 성능에 향상을 줄 수 있다. Current Interface Preferred Interface Function IntFunction Function LongFunction Function DoubleFunction Function DoubleToIntFunction Function DoubleToLongFunction Function LongToDoubleFunction Fu..
[javac] 자바 컴파일러: 컴파일 단계 질문: - 질문 제목 : 클래스의 순서는 어떤 기준으로 정하나요?? - 질문 내용 : main메서드에 Time객체를 생성하고 참조변수 t를통해 시간을 호출하는데 Time 객체를 생성하는 클래스가 선언된곳보다 뒤에 있어도 상관 없는건가요??? 코드는 위에서 아래로 진행되는거 아닌가요??? public class Exe5 { public static void main(String[] args) { Time t = new Time(); t.hour = 12; t.minute = 34; t.second = 56; System.out.println(t.hour); System.out.println(t.minute); System.out.println(t.second); } } class Time { int hou..
성지순례와 인터페이스 과거에 쓴 글이 미래에 갑자기 흥(?)하는 경우가 있다. 인터페이스를 보면서 그런 생각을 했다.
[Java] Wrapper 클래스 vs Overload 메서드 중 우선순위는? 카페에 어떤 분이 아래와 같은 질문을 올렸다. 질문 public class OverrideVsAutoUnboxing { public static void main(String[] args) { System.out.println(new Integer(59)); } } 위와 같은 코드가 59로 출력되는 원리가 궁금합니다. 'new Integer(숫자)'를 system.out.println하면 숫자가 출력되는 원리에 대해 설명주세요. 코드리뷰 일단 위와 같은 코드는 여러 안티패턴(피해야 되어야 할 코드)이 들어가 있다. 불변 클래스의 생성자 생성 아래의 코드에 대한 내용이다. new Integer(59) 자바에서 문자열 타입으로 문자열을 생성할 때 new String()으로 문자열을 만들지 말라고 하는 이유가..