본문 바로가기

우아한테크코스 4기48

[Java] Optional 잘 사용하기 자바 8 이전에는 메서드가 특정 조건에서 값을 반환할 수 없을 때 취할 수 있는 선택지가 두가지 있었습니다. null 반환 Exception 호출 하지만 null을 반환하는 코드는 null을 처리하기 위한 추가 로직히 필요할 뿐 아니라, 만약 null이 제대로 처리되지 않을 경우 NullPointerException 이 발생할 가능성이 커지게 되죠. 또, 예외를 던지는 것은 JVM이 비정상적인 상황이라고 판단하고 최적화를 해주지 않기 때문에 그 비용이 꽤 큽니다. 그러나 자바 8 버전이 등장하면서 Optional이라는 새로운 선택지가 생겼습니다. Optional 자바 docs에서 제공하는 설명에 따르면 Optional은 null이 아닌 값을 포함하거나, 포함하지 않을 수 있는 컨테이너 개체라고 합니다. .. 2022. 3. 1.
[Java] 31이란.. 흔히 equals 와 hashcode를 함께 재정의 하라는 이야기를 들어봤을 것입니다. 저도 당연히 알고 있었지만,, 조금 더 아는체하기 위해 내부 구현을 뜯어봤습니다. 그러자 등장하는 31. 과연 이 녀석의 정체는 무엇일까요?? equals, hashcode 재정의 Object 명세서에서는 equals와 hashcode에 대해 다음과 같이 언급하고 있습니다. 동등성 비교에 사용되는 정보가 변경되지 않는다면, hashcode 메서드는 일관되게 같은 값을 반환한다. equals 메서드가 두 객체를 같다고 판단한다면 두 객체의 hashcode값은 같다. 두 객체가 equals 하지 않다고 해서 두 객체의 hashcode가 다를 필요는 없다. (하지만 성능이 떨어진다 -> Linked로 관리할거임 아마 ;;).. 2022. 2. 28.
[Java] 코드로 객체 지향 기본 용어 알아보기 객체지향을 처음 공부할 때 관련 내용을 검색 하면 책임, 협력, 다형성 등 알 수 없는 용어들이 잔뜩 등장하는 것을 본 경험이 있을 것입니다. 오늘 포스팅에서는 코드를 통해 객체 지향 기본 용어들을 정리하고 앞으로 코드를 작성할 때 의도적으로 이 내용을 떠올릴 수 있도록 도움을 주는 글을 작성하고자 합니다. 책임 책임 이란 객체가 맡아야하는 역할입니다. 한 User가 하나은행에 돈을 입금한다고 가정해봅시다. 비즈니스 상 User는 돈을 입금한다 는 역할을 갖게 됩니다. public class User { public void depositMoney() { //... } } 다음으로는 HanaBank라는 은행 객체를 만들겠습니다. 은행은 입금과 출금에 책임을 갖게 됩니다. public class HanaB.. 2022. 2. 27.
[Java] Stream docs 훑어보기 로또 미션을 진행하면서 의도적으로 Stream API를 사용하려고 노력했는데요. 지금까지 개념적 정립이 되지 않은 상태에서 Stream을 사용했다보니 어려움을 많이 겪었습니다. 오늘 포스팅에서는 Stream docs를 파헤쳐서 Stream에 대해 이해하고자 합니다. Stream이란? Stream은 컬렉션에서 map, reduce 처럼 요소의 스트림에 기능적 작업을 지원해주는 클래스입니다. int sum = widgets.stream() .filter(b -> b.getColor() == RED) .mapToInt(b -> b.getWeight()) .sum(); 위 코드를 보면, Collection의 인스턴스를 stream 소스로 변경하여 빨간색을 갖는 내부 객체의 무게 합을 구하는 reduction 과.. 2022. 2. 24.
[Java] 인스턴스를 캐싱하여 성능 개선하기 (feat. 로또) 오늘 포스팅은 빈번하게 사용되는 인스턴스를 캐싱하여 성능을 개선하는 방법에 대해 작성해보고자 합니다. 정적 팩토리 메소드의 장점을 떠올리면 이름을 가질 수 있다 가 가장 먼저 떠오릅니다. 하지만 정적 팩토리 메소드에는 또 다른 장점이 존재합니다. 바로 자주 사용하는 인스턴스를 캐싱하여 성능을 개선하는 방법인데요. Integer 코드를 통해 이 내용을 확인해봅시다. public static Integer valueOf(int i) { if (i >= IntegerCache.low && i 2022. 2. 23.
[Java] 의존성, 응집도, 결합도를 알아보자 의존성 응집도 결합도 객체 지향 공부를 하게되면 필연적으로 의존성, 응집도, 결합도에 대해 듣게됩니다. 직접 자바 코드로 이 내용들을 학습하고 객체지향 코드를 작성할 때 이들이 왜 중요한지 알아봅시다. 의존성 의존성은 코드레벨에서는 확인할 수 없지만 코드가 실행되는 지점에 객체간 의존관계가 존재하는 경우 이를 동적 의존성으로 분류합니다. 아래 코드를 보겠습니다. public class Developer implements Employee{ @Override public void doWork() { System.out.println("개발자가 일을 합니다."); } } class Designer implements Employee { @Override public void doWork() { System... 2022. 2. 21.