본문 바로가기

분류 전체보기58

[Java] 전략패턴 디자인 패턴 디자인 패턴이란 객체 지향 설계 과정에서 빈번하게 사용되는 설계를 모아 패턴화 한 것입니다. 즉, 재설계를 최소화 하며 요구사항의 변화를 수용할 수 있는 패턴을 정리한 것이라고 생각하면 좋습니다. 아래 예시를 보겠습니다. // 만약 Grade가 z까지 있다면...?? 후..;; public String calculateGrade(final int score) { if (score < 50) { return "F"; } else if (score < 60) { return "D"; } else if (score < 70) { return "C"; } else if (score < 80) { return "B"; } else if (score < 90) { return "A"; } else { .. 2022. 3. 15.
[Java] 의존성 역전 원칙 의존성 역전 원칙에 대해 들어본적 있으신가요? 흔히들 객체지향의 핵심 원칙으로 SOLID를 알고 계실텐데요, 의존성 역전 원칙은 DIP로 객체지향 핵심 원칙의 다섯번째 원칙입니다. 오늘 포스팅에서는 의존성 역전 원칙의 개념에 대해 학습하고 직접 코드를 작성하며 왜 이 원칙을 지켜야 하는가에 대해 몸소 느껴보고자 합니다. DIP DIP는 고수준 모듈을 참조하여 예상치 못한 의존성의 변화를 줄이고자 생겨난 원칙입니다. 여기서 고수준 모듈과 저수준 모듈에 대한 궁금증이 들텐데요. 과연 이 둘은 무슨 의미일까요? 고수준 모듈 상위 수준의 정책으로 하나의 큰 기능이라고 볼 수 있습니다. 간단하게 자바의 Interface를 생각하면 됩니다. 저수준 모듈 고수준 모듈의 기능을 구현하기 위해 필요한 상세 기능. 즉, .. 2022. 3. 7.
[Java] Synchronized 이해하기 자바에서는 멀티 쓰레드 환경에서 안정성을 부여하기 위해 synchronized라는 예약어를 제공합니다. 하지만 일반적으로 순수 자바로 프로그래밍을 하다보면 멀티 쓰레드를 경험할 일이 없어 해당 예약어에 대해 이해하는 것이 어려운데요. 이번 포스팅에는 synchronized예약어를 이해하고 간단하게 실습하는 시간을 갖고자 합니다. 소스코드 synchronized란? synchronized는 사전적으로 동시에 일어나다. 라는 의미를 갖고 있습니다. 그 의미처럼 자바에서도 동시에 일어나는 일에 대해 안정적으로 처리하기 위해 해당 키워드가 생겼습니다. 동시에 하나의 객체에 접근하는 여러 쓰레드에 대해 , 하나씩 들어오세요하며 안내하는 존재라고 생각하면 쉬울 것 같습니다. synchronized는 메서드와 블록으.. 2022. 3. 5.
[Java] StringBuilder와 String 연산 살짝 파보기 최근 미션을 진행하면서 output을 출력할 때 String 연산을 사용한다 vs StringBuilder를 사용한다로 선택지가 나뉘고 있습니다. 지난 백엔드 String 강의에서 네오가 ByteCode를 비교해준 것을 토대로 앞으로의 미션동안 제가 직접 사용할 output 연산에 대한 의사결정을 해보고자 합니다. String 연산의 발전 JDK 5 JDK 5 버전부터 String 연산은 JVM에서 StringBuilder로 최적화 되어 연산되었습니다. 아래 코드를 실행시켜봅시다. public String concat(String s, int i) { return s + i; } javap -c 명령어를 통해 바이트 코드를 간소화해서 확인해보면 아래와 같습니다. java.lang.String concat.. 2022. 3. 3.
[Java] public final vs private final 저는 불변하는 Value Object를 만들 때 field를 private final로 선언합니다. 불변 객체이기 때문에 필드를 변경할 수 없게 만들 뿐 아니라 외부에서의 직접 접근을 막기 때문에 안정성이 높다고 생각하기 때문입니다. 이때 자바를 공부하는 또 다른 사람이 만약 아래와 같은 이야기를 한다면 어떻게 답변을 할 수 있을까요? 불변임을 보장하기 위해서는 public final을 사용해도 충분하지 않나요? 오히려 getter를 만들지 말라는 중론에 더 부합하지 않을까요? 게다가 외부에서 변경하려 해도 컴파일 에러가 발생해서 불변도 보장되는데요? 아래 코드를 보면 정말 private final보다 명료한 것 같기도 하면서 불변성도 잘 보장해주고 있습니다. public class Member { pu.. 2022. 3. 2.
[Java] Optional 잘 사용하기 자바 8 이전에는 메서드가 특정 조건에서 값을 반환할 수 없을 때 취할 수 있는 선택지가 두가지 있었습니다. null 반환 Exception 호출 하지만 null을 반환하는 코드는 null을 처리하기 위한 추가 로직히 필요할 뿐 아니라, 만약 null이 제대로 처리되지 않을 경우 NullPointerException 이 발생할 가능성이 커지게 되죠. 또, 예외를 던지는 것은 JVM이 비정상적인 상황이라고 판단하고 최적화를 해주지 않기 때문에 그 비용이 꽤 큽니다. 그러나 자바 8 버전이 등장하면서 Optional이라는 새로운 선택지가 생겼습니다. Optional 자바 docs에서 제공하는 설명에 따르면 Optional은 null이 아닌 값을 포함하거나, 포함하지 않을 수 있는 컨테이너 개체라고 합니다. .. 2022. 3. 1.