서론문득 Java 공부를 하면서 abstract 로 선언된 클래스랑 interface 를 알게되었습니다.둘이 하는 역할이 비슷한데 왜 하나로 통합하지 않고 각각을 사용할까? 라는 고민이 들었습니다. 그래서 역시나 생각할 시간에 직접 만들어서 내가 비교를 해보면 개념을 파악하는데도움이 될 걸 알기 때문에 직접 해보고 공부한 내용을 바탕으로 글을 써 봤습니다.(부족한 내용은 내 개발 인생 동반자인 자바의정석 과 ChatGPT 를 참고 했습니다) 본론객제치향 관점에서 abstract 와 interface 는 추상화 라는 개념을 사용하는 도구로 쓰입니다. 위 '추상화' 를 통해 컴파일 시점 의존성과 런타임 시점 의존성이 달라지는걸 볼 수있죠.위 방법을 '동적 바인딩' 이라고 합니다. 이제 abstract 랑 i..
안녕하세요 🤚오늘은 Instant & LocalDateTime 차이에 대하여 알아보려고 합니다.위 내용을 다루기 전에 간단하게 자바8 전 후 에 다루던 날짜, 시간 API 가 어떻게 변했는지도 살짝 알아보려고 합니다. 서론 회사 프로젝트를 살펴보던 중 시간 관련 데이터들을 DB에 TimeStamp 로 데이터 타입이 지정되어 있었다.그리고 엔티티에서는 LocalDateTIme 이 아닌 Instant 로 설계가 되어 있었다. 기존에 내가 했던 프로젝트는 DB에서 LocalDateTime 을 사용했고, 엔티티에는 DateTIme&TimeStamp 으로 설계를 해왔기 때문에왜 그럴까? 라는 궁금증이 생겨 따로 정리를 해보고 포스팅하게 되었습니다. 위 내용을 설명하기 전에 간단하게 자바8 전 후 날짜,시간 A..
안녕하세요 👐오늘은 성능측정도구 JMH 에 대한 이야기를 해보려고 합니다. 서론제가 JMH 를 알게 된 계기는 자바에서 Stream 과 일반 for loop 에 대한 성능 측정을 해보고둘에 대한 차이를 알아보다가 자연스럽게 알게 되었습니다. JMH 라이브러리는 간단하고, 어노테이션 기반 방식을 지원하며, 안정적으로 자바 프로그램 또는 JVM 메모리를 사용하는모든 언어를 대상으로 벤치마크를 구현할 수 있습니다. 벤치마크라는 단어가 생소 했습니다. 맨처음엔 mysql workbench 랑 헷갈렸었죠..😅 벤치마크는 컴퓨터 시스템, 소프트웨어, 하드웨어, 디바이스 등으 성능을 측정하고 비교하기 위해 사용되는 표준화된 테스트 입니다.이 테스트는 일반적으로 속도,처리량,응답시간,성능 과 같은 측면을 측정..
안녕하세요🤚오늘은 Stream API 를 공부하며 궁금했던 내용에 대해서 이야기 해보려고 합니다. 서론요즘 모던 자바 인 액션 책에 푹 빠져있어, 매일 매일 책을 읽으며 새로운 지식들을 쌓아가고 있습니다.아직 응애 개발자인, 3개월차 개발자가 보기엔 어려운 내용이 많지만, 새로운 내용이 많아서 처음부터 시작하는 거 같은 신기한 기분을 느끼고 흥미로워서 재밌습니다. 스트림은 자바 8부터 새롭게 생긴 문법으로 기존의 자바 문법들 보다 더 좋을 것이라고 생각했습니다. 그래서 아직 사용이 자연스럽지 않음에도 연습할 필요성을 느껴서 책을 사서 공부를 하는 중입니다. 모던 자바 인 액션은 자바8 이후 새로운 문법에 대해서 이야기하는 책으로대표적으로 Lambda, Stream, Optional 등 새로운 문법들을 ..
안녕하세요 🤚 오늘은 모던 자바인 액션 책에 있는 스트림API 활용하는 실전 문제를 직접 풀어보며 Stream API에 대한 이해도를 높여보고자 합니다. 위 과정은 모던 자바 인 액션 에 있는 챕터에 실전문제중 하나 이며, 자세한 내용은 책을 참고해주시면 감사하겠습니다. 문제를 보기전에 아래 코드는 사전에 작성을 해둬야하는 코드 입니다 public class Trader { private final String name; private final String city; public Trader (String name, String city) { this.name = name; this.city = city; } public String getName () { return name; } public Str..
들어가며 오늘은 Java 에서 제네릭 에대해 알아보겠습니다. 제가 간단하게 알았던 제네릭 타입은 그냥List list = new ArrayList();List linkedList = new LinkedList(); 안에 들어가는 타입을 미리 결정하는게 제네릭 타입 이구나 정도로 알고 있었습니다. 그러다가 저 리스트에 String이 아닌 객체가 들어올수도 있고, Integer, Double 등 다른값이 들어올수도 있는 상황을 생각해 봤습니다. 즉 나중에 저 List 안에 String 도 들어갈수도 있고, Integer 도 들어갈 수 있는즉, 재사용성이 가능한 코드를 어떻게 하면 만들 수 있을까?라는 고민을 해봤고, 그에 대한 해답은 바로 제네릭 을 잘 이해하고 사용하자 였습니다. 고민1어떠한 타입이..
안녕하세요 오늘은 String 객체에 대한 이야기를 해보겠습니다. 문자열 생성 문자열은 자바에서 객체로 취급한다는거 알고 계셨나요? int,double,char는 원시 타입으로 해서 객체가 아닙니다. 그러므로 자체적으로 구현된 메소드들 또한 없죠. 위 타입을 객체 처럼 사용하기 위해서는 이미 만들어진 Wrapper 클래스를 사용하면 됩니다. 한번 String 객체를 생성해 보겠습니다. // 1 String str1 = new String("Hello World"); String str2 = new String("Hello World"); // 2 String str3 = "Hello World"; String str4 = "Hello world"; 위 사진은 보기 코드에 첫번째 new 로 객체를 생성했을..
안녕하세요 오늘은 자바 최상위 객체인 Object에 대해서 다뤄보겠습니다 자바 최상위 객체 Object 이해하기 public class ObjectEx { } 위 코드를 생성을 하면은 기본적으로 생략된 것이 3개가 있다 그 3개가 무엇일까요? 1) import java.lang.* 2) public class -> extends Object 3) public ObjectEx() { super(); } 위 3가지가 생략이 되어있습니다. 자바에서 자동으로 생략을 해주는 것 입니다. 컴파일러에서 자동으로 넣은 상태로 실행을 시켜주는 것입니다 묵시적으로 위 코드들은 무조건 들어가 있어야 합니다 위 3가지는 항상 들어가야하는 default 값 이라고 생각하면 됩니다 Object는 java.lang에 들어가있는 객..