본문 바로가기
728x90

개발/Java53

[Java] 오브젝트: 코드로 이해하는 객체지향 설계 (1) 조영호님의 오브젝트 읽고... 자세한 내용은 도서 구입 후 확인... 1. 티켓 판매 애플리케이션 구현 - 초대장 클래스 public class Invitation { private LocalDateTime when; } - 티켓 클래스 public class Ticker { private Long fee; public Long getFee() { return fee; } } - 관람객 가방 클래스 public class Bag { private Long amount; private Invitation invitation; private Ticket ticket; public boolean hasInvitation() { return invitation != null; } public boolean ha.. 2023. 9. 22.
[Java] Record 알아보기 1. Recode란? Record는 자바 14에서 도입되었고, 16에서 정식으로 채택된 클래스이다. 데이터를 다루기 위한 데이터 클래스로 사용된다. 자동으로 생성자를 만들어주고, getter, equals, hashCode, toString을 자동으로 생성한다. 필드를 final로 생성해줘서 불변 데이터로 관리할 수 있다. Record 클래스는 주로 데이터를 보관하고 전달하기 위한 목적으로 사용되며, 레코드 타입(Record Type)이라고도 한다. 2. 예시 public record ClassName(parameters) { // 필드 정의 } public record Person(String name, int age) { } public class RecordExample { public static.. 2023. 9. 20.
[Java] 자바 JDK 21 버전 특징 JDK 21이 2023년 9월 19일에 릴리즈될 예정이다. String Templates (Preview) [JEP-430]Sequenced Collections [JEP-431]Generational ZGC [JEP-439]Record Patterns [JEP-440]Pattern Matching for switch [JEP-441]Foreign Function & Memory API (Third Preview) [JEP-442]Unnamed Patterns and Variables (Preview) [JEP-443]Virtual Threads [JEP-444]Unnamed Classes and Instance Main Methods (Preview) [JEP-445]Scoped Values (Prev.. 2023. 8. 31.
[Java] 테스트가 어려운 코드 최범균님의 '테스트 주도 개발 시작하기'를 읽으면서 정리해본 글. - 모든 코트를 테스트할 수 있는 것은 아님. 1. 하드코딩된 경로 - 예시 public void sync() throws IOException { Path path = Paths.get("D:\\data\\pay\\test.csv"); ...(중략)... } 위 코드에서 파일 경로가 하드코딩 되어 있다. 이 코드를 테스트하려면 해당 경로에 파일이 반드시 위치해야 한다. 만약 윈도우에 D드라이브가 없으면 테스트가 불가능하다. 또한, 윈도우 전용 파일 경로를 사용하고 있기 때문에 맥이나 리눅스로는 테스트가 불가능하다. 2. 의존 객체를 직접 생성 - 예시 // 의존 대상을 직접 생성 private PayInfoDao payInfoDao = .. 2023. 8. 23.
[Java] 자바 LTS 버전 별 특징 Java 8 (LTS): 람다 표현식 및 함수형 프로그래밍 지원 추가. Stream API로 데이터 처리를 더 효과적으로 할 수 있게 함. java.time 패키지로 새로운 날짜 및 시간 API 도입. PermGen 메모리 영역을 제거하고 Metaspace로 대체. Nashorn JavaScript 엔진 도입. Default 메소드로 인터페이스의 기능 확장 가능. Java 11 (LTS): 지역 변수 유형 추론 (var) 도입. HTTP 클라이언트 표준 모듈 추가. 로우 레벨의 운영체제 및 네트워킹 기능에 접근할 수 있는 ZGC(Z Garbage Collector) 도입. Flight Recorder 및 Mission Control 도구가 OpenJDK에 포함됨. 표준 파일 I/O 라이브러리 개선 (ja.. 2023. 8. 17.
[Java] 자바로 테스트 코드 작성 순서 알아보기 최범균님의 '테스트 주도 개발 시작하기'를 읽으면서 정리해본 글. 1. 초반에 복잡한 테스트부터 시작X 초반부터 다양한 조합을 검사하는 복잡한 상황을 테스트로 추가하면 해당 테스트를 통과시키기 위해 한 번에 구현해야 할 코드가 많아진다. 2. 구현하기 쉬운 테스트부터 시작하기 구현하기쉬운 경우부터 시작하면 빠르게 테스트를 통과시킬 수 있다. 보통 수 분에서 십여 분 이내에 구현을 완료해서 테스트를 통과시킬 수 있을 만큼 쉬운 것을 선택한다. 3. 예외 상황을 먼저 테스트 다양한 예외 상황은 복잡한 if-else 블록을 동반할 때가 많다. 예외 상황을 전혀 고려하지 않은 코드에 예외 상황을 반영하려면 코드의 구조를 뒤집거나 코드 중간에 예외 상황을 처리하기 위해 조건문을 중복해서 추가하는 일이 벌어진다. .. 2023. 7. 24.
[Java] 자바로 TDD 시작하기 최범균님의 '테스트 주도 개발 시작하기'를 읽으면서 정리해본 글. 1. TDD 이전의 개발 1. 만들 기능에 대해 설계를 고민한다. 어떤 클래스와 인터페이스를 도출할지 고민하고각 타입에 어떤 메서드를 넣을지 시간을 들여 생각 2. 1번 단계를 수행하면서 구현에 대해서도 고민한다. 대략 어떻게 구현하면 될지 머릿속에 그려지면 코드 작성 3. 기능에 대한 구현을 완료한 것 같으면 기능을 테스트한다. 이 과정에서 원하는 대로 동작하지 않거나 문제가 발생하면 2번 단계에서 작성한 코드를 디버깅 하면서 원인을 찾는다. 2. TDD 맛보기 TDD는 구현이 먼저가 아닌 테스트부터 시작한다. 간단한 덧셈 기능을 TDD로 구현하면 public class CalculatorTest { @Test void plus() { .. 2023. 7. 20.
[Java] Null 대신 빈 컬렉션이나 배열을 리턴할 것 컬렉션이 비어 있을 경우 null을 리턴하기도 한다. 그 예시로 private final List exampleList = ...; public List getExample() { return exampleList.isEmpty() ? null : new ArrayList(exampleList); } 이렇게 사용을 하기도 하는데, 이렇게 할 경우 리턴 받는 쪽에서 null을 처리하는 코드를 추가로 작성해야 한다. 혹시나 null 처리 코드가 없을 경우 에러가 발생할 확률이 높다. 이를 방지하기 위해서는 public List getExample() { return new ArrayList(exampleList); } 이렇게만 해주면 null처리 코드가 없어도 에러가 발생할 확률을 낮출 수 있다. 하지만 이.. 2023. 6. 28.
[Java] Stream 사용 시 주의 사항 스트림은 자바 8부터 도입된 기능으로, 데이터 처리를 간결하고 효율적으로 할 수 있도록 지원한다. 이를 적절히 활용하면 데이터 처리 작업을 더욱 쉽고 효율적으로 수행할 수 있다. 스트림은 연속된 데이터 처리, 지연 평가(Lazy evaluation), 파이프라인 처리, 병렬 처리, 스트림 연산, 외부 반복 숨김 등의 특징이 있다. 하지만 주의해서 사용해야 한다. 이유 리소스 누수: 스트림은 외부 리소스(파일, 네트워크 연결 등)와 관련될 수 있다. 스트림을 제대로 닫지 않으면 리소스 누수가 발생할 수 있다. 따라서, 스트림 사용 후에는 반드시 명시적으로 닫아야 한다. 예외 발생 여부와 관계없이 finally 블록이나 try-with-resources 문을 사용하여 스트림을 닫아야 한다. 버퍼링과 플러싱:.. 2023. 6. 14.
728x90