반응형

Java 12

[Java] Nested Class(중첩 클래스) - Static Nested Class, Inner Class, Anonymous Class, Local Class

다음 오라클 공식 문서와 Effective Java 서적을 참고하여 공부했습니다. https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html Nested Classes (The Java™ Tutorials > Learning the Java Language > Classes and Objects) The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer avail..

Java 2021.09.19

[Java] Builder 생성자 패턴

객체를 생성하기 위해서는 public 생성자 또는 static 팩토리 메서드를 사용할 수 있습니다. 그런데 필수 매개변수가 아닌 선택 매개변수의 개수가 많을 경우, 코드의 효율성, 안정성, 가독성을 위해 Builder 패턴을 고려하는 것이 좋습니다. 여러 생성자 패턴과 그 장단점을 알아보겠습니다. Index 1. 예제 클래스 2. Telescoping Constructor Pattern(점층적 생성자 패턴) 3. JavaBeans Pattern(자바빈즈 패턴) 4. Builder Pattern(빌더 패턴) 1. 예제 클래스 다음과 같이 2개의 필수 멤버 필드와 4개의 선택 멤버 필드를 가지는 Book 클래스가 있다고 합시다. import java.time.LocalDate; public class Boo..

Java 2021.09.10

[Java] JDBC에서 Class.forName과 클래스 로딩에 대해 알아보기

지난 포스팅에서 Java Reflection에 대해 다뤘습니다. JDBC를 사용할 때 쓰이는 Class.forName 역시 Java Reflection에서 제공하는 기능 중에 하나입니다. JDBC 를 사용하여 DB에 접근하기 위해서는 제일 먼저 드라이버 클래스를 로드해야 하는데, 그 때 Class.forName을 사용합니다. 이번 포스팅에서는 드라이버를 로드할 때 Class.forName이 어떻게 활용되는지 알아보겠습니다. 아래의 문서와 Java API를 참고하여 공부했습니다. https://www.baeldung.com/java-classloaders https://docs.oracle.com/javase/9/migrate/toc.htm#JSMIG-GUID-A868D0B9-026F-4D46-B979-9..

Java 2021.09.07

[Java] Reflection

자바빈에 대해 공부하다가 자바빈은 디폴트 생성자를 가지고있어야 한다는 것을 알게 되었습니다. 그 이유는 툴이나 프레임워크에서 리플렉션을 이용하여 객체를 생성하기 때문이라고 했습니다. 저는 리플렉션이 대략적으로 클래스에 대한 정보를 알아내는 기술이라고 알고 있었기 때문에, 리플렉션을 통해 어떻게 객체를 생성하는 것인지 궁금했습니다. 그래서 리플렉션에 대해 더 자세히 공부해보기로 했습니다. 아래의 오라클 문서를 참고하여 공부하였습니다. https://www.oracle.com/technical-resources/articles/java/javareflection.html Index 1. Reflection이란? 2. 예제 코드 3. Reflection을 위한 설정 4. instanceof 연산자 기능 실행하..

Java 2021.09.05

[Java] 동일성(Identity)와 동등성(Equality), 그리고 hashCode와 equals

클래스의 객체를 비교할 때, 동일성을 비교할 것인지 동등성을 비교할 것인지를 명확하게 해야 할 때가 있습니다. 그렇다면 동일성과 동등성이란 무엇일까요? 동일성(Identity) 두 객체의 동일성을 비교했을 때 같다는 것은, 실제 객체가 같다는 것입니다. 두 객체가 가지고 있는 값이 같을 뿐만아니라 힙 메모리 상에서 같은 주소에 위치해야 합니다. 두 객체가 물리적으로 같은지를 비교하는 셈입니다. 또, 동일한 객체는 같은 해시 코드 값을 가집니다. 해시 코드 값이란 모든 객체가 가지고 있는 고유한 값으로, 보통 객체가 위치한 메모리 주소에 특정 함수를 적용한 결과값을 나타냅니다. 해시 코드 값은 Object 클래스의 멤버 메소드인 hashCode()로 얻을 수 있습니다. 모든 객체는 Object 클래스의 서..

Java 2021.08.24

[Java] Object 클래스

자바를 배울 때 모든 클래스는 Object 클래스를 상속받는 하위 클래스라고 배웠습니다. Object 클래스에 대해 더 자세히 공부해보았습니다. Index Object 클래스의 전체 코드 package import constructor getClass() hashCode() equals() clone() toString() notify(), notifyAll() wait() 1. Object 클래스의 전체 코드 Java 11의 Object 클래스의 코드를 보면 다음과 같습니다. package java.lang; import jdk.internal.HotSpotIntrinsicCandidate; public class Object { private static native void registerNativ..

Java 2021.08.08

[Java] Oracle Java API 버그 제보하기

작년에 Java 11의 java.net패키지에 있는 HttpURLConnection 클래스 내부의 코드를 읽어보다가 Java Doc에 작은 오타가 있는 것을 발견했습니다. 그래서 Oracle Java SE 커뮤니티의 Bug Report를 활용해서 오타를 제보했었는데, 그 경험을 공유하기 위해 글을 작성하였습니다. Index 버그 제보 결과 버그 제보 방법 1. 버그 제보 결과 HttpURLConnection클래스에 getResponseCode() 메소드의 Java Doc에 'If we can't a status-line then re-throw any exception' 이라는 문구가 있었습니다. 'can't'와 'a' 사이에 동사가 빠져있는 오타가 있었고, 이 자리에 'find'가 들어가면 적절할 것이..

Java 2021.08.08

[Java] JPMS와 Module

package에 대해 공부하던 중, module이라는 개념을 새롭게 접하게 되었습니다. module이 무엇인지, 언제 생겨났는지, 언제 쓰이는지에 대해 공부해보았습니다. Index JPMS(Java 9 Platform Module System) JPMS 이전 JPMS의 목표 Module Module Example Module 선언하기 Module Keywords 1. JPMS(Java 9 Platform Module System) Oracle Java 9에서 JPMS와 함께 Module이 소개되었습니다. Module은 OpenJDK의 Jigsaw 프로젝트의 결과물입니다. Jigsaw 프로젝트에 대한 자세한 내용은 아래의 링크에서 참고할 수 있습니다. Project Jigsaw Project Jigsaw ..

Java 2021.08.08

[Java] JVM 구조

1. JVM이란? JVM은 Java Vritual Machine의 약자로, 자바 애플리케이션을 실행하는 가상의 기계입니다. JVM은 자바 바이트 코드를 운영체제에 맞는 바이너리 코드(기계어)로 변환하여 프로그램을 실행하기 때문에 운영체제에 종속적입니다. 자바 외에도 Groovy, Kotlin, JRuby 등의 다양한 프로그래밍 언어로 작성된 프로그램이 JVM에서 실행될 수 있습니다. 2. JVM의 구조 JVM은 크게 다섯 가지 구조로 구성되어 있습니다. 클래스 로더 시스템 메모리 실행 엔진 네이티브 메소드 인터페이스 네이티브 메소드 라이브러리 2-1. 클래스 로더 시스템 클래스 로더 시스템은 .java 파일의 소스코드를 컴파일한 .class 파일의 바이트 코드를 읽어서 운영체제에 맞는 바이너리 코드로 바..

Java 2020.10.25
반응형