자바생
article thumbnail
try-with-resources 는 왜 사용해야할까?
Java 2023. 3. 28. 14:55

글을 쓰게 된 이유 DB 접근 강의를 들으면서 네오가 키워드로 try-with-resources, AutoCloseable 를 던져주었다. 그래서 평상시에 try-with-resources를 그냥 사용하기만 했는데 이 기회에 좀 깊게 공부해보려고 한다. try-with-resources는 무엇인가요? try-catch-finally와 다르게 사용한 리소스에 대해서 명시적으로 close 하지 않아도 자동으로 close 해주는 것을 말합니다. 이펙티브 자바 아이템9 에서도 “try-finally 보다는 try-with-resources를 사용하라”는 말이 있습니다. 왜 try-with-resources를 사용해야 하는지 이번 글을 읽으면 깨달을 수 있습니다. try-with-resources는 왜 사용해야하..

파라미터에 Optional은 왜 안티패턴?
Java 2023. 3. 25. 20:24

글을 쓰게 된 이유 체스 미션을 하면서 “Optional을 메서드의 파라미터로 넣는 것은 안티패턴이다.”라는 리뷰를 받았습니다. 처음에 stackoverflow를 보고 이해되질 않았습니다. 파라미터로 넣든, Optional 을 리턴하든 똑같은 거 아닌가? 스택오버플로우에 채택된 답을 보면 아래와 같습니다. Using Optional parameters causing conditional logic inside the methods is literally contra-productive. Needing to pack an argument in an Optional, is suboptimal for the compiler, and does an unnecessary wrapping. In comparison..

article thumbnail
unmodifiableList & copyOf & 방어적 복사
Java 2023. 2. 21. 17:46

글을 쓰게 된 이유 우테코 두 번째 미션을 진행하면서 리뷰를 기다리는 동안 다른 분들의 리뷰를 가끔 구경하러 갔다,, 그런데 "unmodifiableList를 사용하면 무조건 불변을 보장할 수 있을까요?"에 대한 리뷰였다. 나는 첫번째 자동차 미션에서 Cars 일급 컬렉션 클래스에서 List를 반환할 때, unmodifiableList를 통해 반환했다. 당연히 불변이 보장되는 줄 알고 말이다,, 그 리뷰를 보고 주섬주섬 자동차 미션을 꺼내서 테스트를 해보고 공부해 보았다. unmodifiableList 보기 description을 보면 수정 불가능한 보기를 반환합니다. 즉, 읽기 전용의 List를 반환한다는 뜻이겠지요? 수정을 시도할 경우에는 UnsupportedOperationException이 발생한..

article thumbnail
Generic & Wildcard
Java 2022. 12. 29. 20:26

Generic vs Wildcard List list // wildcard List list // generic Generic은 타입이 정해지면 그 타입이 무엇인지 알고 그 이후에 사용하겠다는 뜻이고, Wildcard는 타입도 모르겠고, 알 필요 없으니까 뭐든 들어가도 된다라는 뜻을 가지고 있습니다. generic method, wildcard method static void method(T t) { } static void method(List list) { } static void method(List t) { } static void method(List list) { list.forEach(s -> System.out.println(s)); } @Test void genericVsWildcard..

article thumbnail
Generic in Java
Java 2022. 12. 17. 21:14

글을 쓰게 된 이유 Java 기초를 더 단단히 다지기 위해서 Java 관련 스터디를 진행하고 있습니다. 그래서 이번 주 주제인 Generic을 공부해 보도록 하겠습니다. Generic은 왜 사용하는 것일까? 타입 안정성 타입 안정성을 보장한다는 것은 무슨 뜻일까요? Java는 많은 타입을 가지게 되는데, 이러한 타입들이 제대로 매칭되지 않으면 ClassCastException이 런타임 시점에 발생하게 됩니다. 아시다시피 제일 힘든 에러는 런타임 에러, 제일 착한 에러는 컴파일 에러라고 하는데 제네릭을 사용하면 ClassCastException을 컴파일 에러 때 잡을 수 있어서 "타입 안정성"을 보장한다고 할 수 있습니다. 먼저 제네릭 사용여부에 따른 예시 코드를 보고 왜 타입 안정성을 보장할 수 있는지 ..

article thumbnail
JDK ? JRE ?
Java 2022. 9. 15. 13:15

글을 쓰게 된 이유 스프링을 공부하면서 Java 버전을 설정하는 중에 JRE, JDK 를 보게 되었습니다. 그래서 둘의 차이를 알아보고자 공부하면서 알게 된 내용들을 정리해보았습니다. JDK, JRE JVM + Library Classes(Core API) = JRE JRE + Development Tools = JDK JDK가 무엇인가요? Java Development Kit의 약자로 java 애플리케이션을 개발하는 데 사용되는 소프트웨어 개발 환경입니다. JRE, 인터프리터/로더(Java), 컴파일러(javac), archiver(jar), documentation generator(Javadoc)를 포함하고 있습니다. 즉, 자바 프로그램을 개발할 수 있는 환경을 제공하는 "개발 도구"와 자바 프로그..

정적 메서드는 왜 오버라이딩 되지 않을까?
Java 2022. 8. 29. 13:25

Override(Instance Method) super class의 인스턴스 메서드와 동일한 시그니처(이름, 매개변수 형식, 반환 형식)을 가진 sub class의 인스턴스 메서드가 super class의 메서드를 "재정의"하는 것을 말합니다. public class Main { public static void main(String[] args) { System.out.println("=========#1======="); Class1 c1 = new Class1(); c1.doThat(); //Class1 c1.doIt(); //Class1 System.out.println("=========#2======="); Class2 c2 = new Class2(); c2.doThat(); //Class2..

article thumbnail
throw vs throws
Java 2022. 5. 17. 10:21

throw와 throws는 메서드나 코드 block에서 예외를 명시적으로 던지는 자바의 예외 처리 방법이다 throw(파랑색) 메서드 내에서 사용됨 한 번에 하나의 예외만 발생시킬 수 있다 throw할 예외의 인스턴스 변수 사용 checked exception propagation 할 수 없음 unchecked exception만 propagation 할 수 있다 애초에 exception을 명시해주지 않으면 propagation이 일어나기 전에 complie 에러가 발생한다 throws(주황색) 메서드 signature에서 사용됨 쉼표로 여러 예외를 선언할 수 있다 throws할 예외의 클래스 이름을 쓴다 checked exception, unchecked exception propagate 할 수 있음..

article thumbnail
java 연산자
Java 2022. 5. 6. 20:42

산술 연산자(Arithmetic Operators) 간단한 수학 연산을 하기 위해 사용하는 연산자 기본 숫자 및 그에 대응하는 boxed type에서만 작동 +, -, *, /, %가 존재한다 '/'는 몫, '%'는 나머지를 의미한다 @Test @DisplayName("산술 연산") void op() throws Exception{ int a = 6; int b = 4; System.out.println("a/b = " + a / b); //몫 System.out.println("a%b = " + a % b); //나머지 } 비트 연산자(Bitwise Operators) 비트 연산자에는 Bitwise Logical Operators, Bitwise Shift Operators로 나눌 수 있다 Bitwis..

article thumbnail
Primitive Type, Reference Type, Literal
Java 2022. 5. 3. 11:02

Primitive Type의 종류와 범위 그리고 기본 값은 무엇인가요? 타입 size 최대 최소 기본값 boolean 1 X X false byte 16 -2^7 2^7 0 char 16 0 2^16-1 \u0000 short 16 -2^15 2^15-1 0 int 32 -2^31 2^31-1 0 long 64 -2^63 2^63-1 0 float 32 -2^-149 (2-2^-23)*2^127 0.0 double 64 -2^-1074 (2-2-52)*2^1023 0.0 static 변수는 값을 초기화하지 않으면 기본값으로 초기화가 되므로 테스트를 작성할 때 static 변수로 선언한 뒤 기본값을 출력했다 char의 기본값이 무엇을 나타내는지 몰라 찾아보니 인텔리제이에선 \u0000을 저렇게 나타낸다 p..

article thumbnail
Java volatile keyword
Java 2022. 4. 18. 10:12

자바에서 동기화와 관련된 keyword에는 synchronized와 volatile이 있다 이번에는 volatile에 대해 공부해보자 synchronized와 volatile의 차이는 뭔가요? synchronized 상호 배제와 가시성을 모두 보장 코드 block과 메서드에서 사용 가능 스레드 메모리와 메인 메모리 사이의 "모든" 변수 값을 동기화 volatile보다 overhead 크다 null 객체는 동기화 X(링크) null 객체를 동기화하고, 다른 곳에서 해당 객체를 사용하게 된다면 NPE발생 lock을 obtain하고 release 한다(이유는 아래에서) volatile "atomic"이 아닌 가시성만을 보장 필드에서만 사용 가능 스레드 메모리와 메인 메모리 사이의 volatile 변수 값을 동..

article thumbnail
final 키워드
Java 2022. 3. 5. 16:01

이번에 새싹 스터디에서 코드 리뷰에 대한 내용 중 static final을 사용할 지, final을 사용할 지 구분이 되지 않음 그래서 이번 기회에 final을 제대로 공부해보고자 정리해봄 final 키워드는 무엇인가요? 재할당 불가를 명시하는 키워드 final 키워드는 변수, 메서드, 파라미터, 클래스에서 사용하는 “non-access modifier(비접근 수정자)” 로서, 각각 사용하는 context마다 사용법이 다릅니다. context마다 사용법이 다르다고 말씀하셨는데 어떻게 다른가요? primitive 변수는 한 번 초기화되고 이후에 수정할 수 없음 reference 변수는 다시 재할당할 수 없지만, 내부 값은 수정할 수 있음 메서드는 overriding을 prevent함 클래스는 상속을 pre..

728x90

검색 태그