Java
-
사용자 정의 클래스와 String 클래스의 메모리 관리Java 2024. 8. 30. 04:30
들어가기 전에equals() 메서드를 사용했을 때 사용자 정의 클래스와 String 클래스의 메모리 주소가 달라지는 점을 구체적으로 알아보게 됨 String 클래스의 메모리 관리Java String 클래스는 불변(immutable)이고, String 객체는 String Pool이라고 불리는 특별한 메모리 영역에서 관리된다. Java SE 8 String intern Spring Pool: Java는 동일한 내용의 문자열에 대해 메모리를 절약하기 위해, 문자열 리터럴을 String Pool에 저장한다. 만약 동일한 내용의 문자열 리터럴이 여러 번 사용되면, Java는 새로운 객체를 생성하지 않고,기존의 String Pool에 있는 문자열을 재사용한다.String str1 = "123"; // 메모리 주소:..
-
JUnit private한 메서드 어떻게 테스트 할까?Java 2024. 8. 24. 20:02
들어가기 전에JUnit 테스트 코드를 작성하는 데 private 접근제어자 메서드를 테스트하는 방법에 대해 고민하게 됨 문제 상황아래 코드와 같이 입력 값으로 base64Url 문자열 패딩이 누락된 걸 전달하고 output을 확인하고 싶어졌다. 하지만, 실제로 동작에 필요한 메서드는 private method인 base64UrlToBase64()다.2가지 방법을 알게되었고 하나씩 알아보자. 1. 접근제어자 protected 변경접근제어자를 public으로 변경하는 방법도 가능하지만 테스트 코드를 위해서 public 변경은 해당 메서드 설계에 반하는 처리라고 생각된다. 왜냐하면, 해당 private 메서드는 설계 당시 해당 클래스 내부에서만 사용하는걸로 계획하고 만들것이기 때문이다.(주먹구구식으로 개발하..
-
JUnit Assertions와 AssertJ AssertionsJava 2024. 8. 22. 03:20
들어가기 전에Junit5 사용해 테스트 코드를 작성하며 알게 된 내용을 작성 import Assertions테스트 코드 작성을 할 때 사용하는 assertThat()은 두 가지 import를 제시한다.import org.junit.jupiter.api.Assertions;import org.assertj.core.api.Assertions; 무슨 차이가 있는걸까? 라는 생각에 찾아보았다. JUnit Assertions 클래스는 기본적인 단위 테스트 검증 메서드를 제공하고 이 메서드들은 주로 단순한 값의 비교, 참/거짓 확인, 예외 발생 여부 등을 검증하는 데 사용된다. assertEquals(expected, actual): 두 값이 같은지 확인.assertTrue(condition): 조건이 참인지 확..
-
모던 자바 인 액션, 기초 - 네번째 이야기Java 2024. 6. 17. 12:39
들어가기 전에Java를 더 Java스럽게 사용하기 위해 책을 읽고 정리 Chapter 2. 동작 파라미터화 코드 전달하기Item 3. 익명 클래스익명 클래스(Anonymous Class)는 자바의 지역 클래스(Local Class, 블록 내부에 선언된 클래스)와 비슷한 개념이다.말 그대로 이름이 없는 클래스다. 익명 클래스를 이용하면 클래스 선언과 인스턴스화를 동시에 할 수 있다. 즉, 즉석에서 필요한 구현을 만들어서 사용할 수 있다. 익명 클래스를 사용해보자.// ApplePredicate를 구현하는 객체를 만드는 방법으로 필터링List redApples = filterApples(inventory, new ApplePredicate() { public boolean test(Apple apple){ ..
-
모던 자바 인 액션, 기초 - 세번째 이야기Java 2024. 6. 14. 17:23
들어가기 전에Java를 더 Java스럽게 사용하기 위해 책을 읽고 정리 Chapter 2. 동작 파라미터화 코드 전달하기Item 1-2. 변화하는 요구사항에 대응하기우리가 어떤 상황에서 일을 하든 소비자 요구사항은 항상 바뀐다. 변화하는 요구사항은 소프트웨어 엔지니어링에서 피할 수 없는 문제다. 예를들어, 기존의 농장 재고목록 애플리케이션이 있다. 그리고 아래와 같은 일이 하룻밤 자고나면 발생한다.음... 일단 녹색 사과만 필터링 해주세요.녹색, 연두색, 주황색, 보라색 아 그냥.. 모든 색깔 필터링 할 수 있게 해주세요.생각해보니까 무거운 사과만 필터링하는 것도 필요하네요.다시 생각해보니 녹색 사과이면서 무거운 사과도 필요해요 ㅎㅎ위와 같은 변화무쌍한 요구사항에 대응하기 위해서 자바에서는 동작 파라미..
-
모던 자바 인 액션, 기초 - 두번째 이야기Java 2024. 5. 9. 19:26
들어가기 전에Java를 더 Java스럽게 사용하기위해 책을 읽고 정리 Chapter 1. 자바 8,9,10,11 무슨 일이 일어나고 있는가?Item 3. 자바 함수프로그래밍 언어의 핵심은 값을 바꾸는 것이다. 역사적으로 프로그래밍 언어에서는 이 값을 first-class(일급) 값(또는 citizen(시민), 1960년대 미국 시민 권리에서 유래)이라고 부른다. 프로그램을 실행하는 동안 이러한 모든 구조체(메서드, 클래스 같은)를 자유롭게 전달할 수는 없다. 이렇게 전달할 수 없는 구조체는 이급 시민이다. 예를 들어 런타임에 메서드를 전달할 수 있다면, 즉 메서드를 일급 시민으로 만들면 프로그래밍에 유용하게 활용할 수 있다.자바 8 설계자들은 이급 시민을 일급 시민으로 바꿀 수 있는 기능을 추가했다. ..
-
모던 자바 인 액션, 기초 - 첫번째 이야기Java 2024. 5. 8. 01:00
들어가기 전에프로그램 개발에 내가 주력 언어로 사용하는 Java를 더 Java스럽게 사용하기 위해 책을 읽고 정리 Chapter 1. 자바 8,9,10,11 무슨 일이 일어나고 있는가?Item 1. 역사의 흐름은 무엇인가?자바 역사를 통틀어 가장 큰 변화가 자바 8에서 일어났다. # 사과 목록을 무게순으로 정렬 (자바 8 이전)Collections.sort(inventory, new Comparator() { public int compare(Apple a1, Apple a2) { return a1.getWeight().compareTo(a2.getWeight()); }}# 사과 목록을 무게순으로 정렬 (자바 8 이용)inventory.sort(comparing(Apple::ge..
-
blocking/non-blocking 을 Java 와 함께 알아보자Java 2024. 1. 3. 23:24
들어가기 전에 비동기 프로그래밍에 대한 개념을 대충 알고 있지만 제대로 알아보자라는 생각을 가지고 정리해보려고 한다. 동기와 비동기 그리고 블로킹과 논블록킹 웹 서버 또는 입출력(I/O)을 다루다 보면 동기/비동기 & 블로킹/논블로킹 이러한 용어들을 접해본 경험이 있다. 이 개념들은 멀티 태스킹과 밀접한 관련이 있다. 그래서인지 두 개념을 혼용해서 사용하는 사람들이 꽤 많다. 동기/비동기 & 블로킹/논블로킹 이 두 개념은 멀티 태스킹이라는 목적은 같지만, 서로 다른 차원의 수행 방식을 설명하는 개념이다. 동기/비동기는 클라이언트가 요청하는 작업에 대해 완료 여부를 확인해 작업을 순차적으로 수행할것인가에 대한 관점이고, 블로킹/논블로킹은 현재 수행하는 작업이 block(차단, 대기) 되는가에 따라 다른 작..