본문 바로가기

기초 지식/Java

(18)
[Java] Java Primitive Type VS Reference Type Java에서는 기본형 타입과 참조형 타입이 있습니다. 저도 너무나 자연스럽게 사용하고 있지만 아래의 질문을 받으니 대답 할 수가 없었습니다. Java에서 Primitive Type, Reference Type은 메모리 어디에 저장이 될까요? 이에 대한 정답은 아래에 정리하겠습니다. 1. Primitive Type (기본형 타입) 기본값이 NULL이 아닌 값들로 이루어져있다. 실제 값을 저장하고 메모리는 스택(Stack) 메모리에 저장된다. 컴파일 에러를 발생시킨다. 타입 메모리 크기 기본값 표현 범위 boolean 1 byte false true, false byte 1 byte 0 -128 ~ 127 short 2 byte 0 -32,768 ~ 32,767 int 4 byte 0 -2,147,483,6..
[Java] Java의 날짜, 시간 클래스는 어떻게 편해졌나 Java 1.7까지는 기본 SDK에서 날짜와 시간을 표현하고 사용하기 위해서는 java.util.Date 클래스와 java.util.Calendar 클래스를 이용해야 했습니다. 하지만 아주 잠깐만 사용해봐도 어마어마하게 불편하다는 것을 알 수 있습니다. 그래서 나온것이 Joda-Time이라는 오픈소스 라이브러리였고 Java 8에서는 드디어 개선되어서 적용되었습니다. 그러면 어떻게 좋지 않았고 어떠한 사항이 개선되었는지 확인해보겠습니다. 우선 아주 잘 정리된 Naver D2의 게시글을 공유해드립니다. 저의 게시글은 아래 링크의 글에 기반으로 한 글입니다. 그런데 정리를 곁들인. d2.naver.com/helloworld/645609 1. JDK 1.8 미만의 날짜 계산 단점 사용시 착오가 생길 수 있는 부..
Java 1.8 Optional Optional Optional을 사용하지 않을 때는 메서드의 결과값이 null일 경우를 체크하고 분기를 나눠서 처리해야 했습니다. 코드가 지저분해지고 길어졌죠. Optional을 사용하면 조금 더 직관적으로 표현할 수 있습니다. 메서드가 반환할 결과값이 '없음'을 명확하게 표현하고, null을 반환하면 에러를 유발할 가능성이 높은 상황에서 Optional을 반환 타입으로 사용하는 것이 목적이다. 위의 목적에 맞는 사용법을 추구하여 사용해야겠습니다. 1. 기본 사용 예시 //null이 반환된 메소드 String isNullString = testBO.getString(); //기존 null 체크 방식 String retValue = ""; if (isNullString == null) { retValue..
Java 1.8 Default Method Default Method - 자바 1.8부터 도입된 문법으로 인터페이스 내부에 로직을 포함 시킬 수 있는 것이 특징 - 하위호환성을 위해 도입 Interface 라는 기능에 어울리지 않는 Default Method가 Java 1.8에서 추가 되었습니다. 하위호환성을 위한다는 것은 기존의 레거시 코드에 interface 메소드를 추가해야한다면 해당 interface를 상속받는 모든 클래스에서 추가된 메소드의 구현을 해줘야합니다. 하지만 Default Method를 사용하고 수정이 필요한 클래스에서만 메소드 오버라이딩을 해준다면 간편하게 수정할 수 있습니다. interface TestInterface { //기존 메서드들 public void go(); public void get(); default vo..
Java 1.8 Stream 정리 Java Stream 자바 1.8 버전에서는 Stream 기능이 추가 되었습니다. 기존에는 for, foreach를 사용하여 컬렉션과 배열을 반복하며 인자들을 가공해왔을텐데 이 부분을 Stream으로 대체할 수 있게 되었습니다. 이로 인해 코드의 양은 줄어들고 가독성은 좋아지게 되었습니다. 장점으로는 코드량이 줄어든다는 점과 가독성 외에도 멀티 쓰레딩(multi threading)이 가능하다는 것입니다. 하지만 단점도 있겠죠 많은 양의 데이터를 처리하는데 foreach를 대체하려고 Stream을 사용하면 속도면에서 조금 느리게 됩니다. 따라서 많은 양을 처리하고 효율성이 중요한 부분이라면 foreach를 사용하는 편이 낫습니다. (참고. madplay.github.io/post/mistakes-when-..
Java 1.8 method reference (메소드 레퍼런스) Method Referece - 자바 1.8부터 도입된 문법으로 특정 람다 표현식을 축약한 것 - 가독성을 높일 수 있다 간단하게는 람다 표현식을 특수한 상황에서 좀 더 보기 편하게 작성하는 방식이라고 이해할 수 있습니다. //람다식 (args) -> ClassName.staticMethod(args) //메소드 참조 ClassName::staticMethod //람다식 (arg0, rest) -> arg0.instanceMethod(rest) //메소드 참조 ClassName::instanceMethod //람다식 (args) -> expr.instanceMethod(args) //메소드 참조 expr::instanceMethod //모던자바인액션 참조 예시를 들어보자면 저는 주로 stream과 함께 ..
Java 1.8 Lambda Expression (람다 표현식) Lambda Expression (람다 표현식) - 자바 1.8 부터 도입된 함수 지향적 표현 방식이다. - 간단하게 식별자없이 실행 가능한 함수표현이다. - 병렬처리, 이벤트 지향적 프로그래밍에 적합하다. 사용방법 (매개변수, ...) -> { 실행문 ... } //람다식 x interface Phone{ String getName(String series, String version); } class Main { public void mainExample() { Person person = new Person(); person.buyPhone(new Phone() { public String getName(String series, String version) { return series + vers..
Java 각 버전의 특징들 (~JAVA21) Java 1.8이 나온지는 벌써 6년정도 되었습니다. 그동안 java 1.8을 꾸준히 사용해오고 jdk 11뿐만 아니라 최근에는 jdk 17까지 나온 상황입니다. 이 시점에서 다시 한번 정리하면 좋을 것 같아서 Java 1.8 부터 정리해보려고 합니다. 물론 다양한 특징들이 있겠지만 특징적인 일부만 나열하도록 하겠습니다 Java 1.8 특징 (2014.03 release) Lambda Expression (람다표현식) Method Reference (메소드 참조) Stream (스트림) Default Method Optional Joda Time Java 9 특징 (2017.09 release) Jingsaw 기반 런타임 모듈화 Jshell Private Interface Method Immutable ..