Language/Java
-
[Java] 금융 거래에는 BigDecimal을 사용하자.Language/Java 2024. 2. 19. 15:28
1. 개요 BigDecimal은 금융 관련 연산 같이 오차가 발생해서 안되는 상황에 사용되는 타입이다. float, double과 BigDecimal을 간단하게 비교해보자(float과 double에 대한 자세한 내용은 여기를 참고하세요). 내부 표현 방식: BigDecimal: 수를 정수(unscaled value)와 scale로 나눠서 표현한다. 예를 들어 1.23의 정수는 123이고 scale은 2다. float & double: 부동 소수점 표현에 따라 표현한다. 정밀도: BigDecimal: 임의 정밀도(메모리의 제한 내에서 원하는 만큼의 정밀도)를 갖는다. float & double: 각각 32비트, 64비트 수로 표현하여 값의 범위나 정밀도에 제한이 있다. 속도: BigDecimal: 무제한 ..
-
[Java] 객체지향 설계원칙, SOLID 알아보기Language/Java 2024. 1. 11. 17:26
1. 개요 SOLID 원칙은 로버트 C. 마틴이 발표한 5가지 객체지향 설계원칙의 약자다. 각 글자는 다음과 같은 원칙을 의미한다. SRP(Single Responsibility Principle): 단일 책임 원칙 OCP(Open-Closed Principle): 개방 폐쇄 원칙 LSP(Liskov Substitution Principle): 리스코프 치환 원칙 ISP(Interface Segregation Principle): 인터페이스 분리 원칙 DIP(Dependency Inversion Principle): 의존 역전 원칙 이 원칙들의 목표는 응집도는 높이고 결합도를 낮추자는 고전 원칙을 객체지향 관점에서 재정의 한 것이다. 2. 응집도와 결합도 응집도를 높이고 결합도를 낮추면 유연하고 유지보수..
-
[Java] 객체지향 프로그래밍에 대해 알아보자Language/Java 2023. 12. 27. 17:52
1. 객체지향 프로그래밍이란? 객체지향 프로그래밍이란 프로그램을 데이터와 데이터를 처리하는 행동(메소드)을 가진 객체의 집합으로 보는 프로그래밍 패러다임이다. 프로그래머는 객체의 설계도인 클래스를 통해 객체가 가져야 할 상태와 행동을 정의하고, 객체를 생성하고 조립하며 프로그램을 개발한다. 하나의 역할을 수행하기 위해 필요한 데이터와 메소드를 객체로 묶어 사용하기 때문에 재사용이 용이하고, 유연하며, 유지보수하기 쉽기 때문에 대규모 소프트웨어 개발에 사용된다. 2. 객체지향 프로그래밍의 등장 배경 프로그래밍 패러다임은 절차지향 프로그래밍 → 구조적 프로그래밍 → 객체지향 프로그래밍 순서대로 등장하였다. 각 패러다임은 이전 패러다임의 단점을 보완하기 위해 고안되었으며 이들의 특징은 다음과 같다. 절차지향 ..
-
[Java] equals와 hashCodeLanguage/Java 2023. 9. 27. 15:16
equals와 hashCode는 모든 클래스의 부모인 Object 클래스에 정의되어 있는 메소드다. 각 메소드는 다음과 같은 기능을 한다. equals: 두 객체가 같은지 비교하고 boolean을 리턴한다. 오버라이딩하지 않을 경우 두 객체의 주소값을 비교한다. hashCode: 객체의 고유값을 리턴한다. 오버라이딩하지 않을 경우 객체의 메모리 주소를 바탕으로 한 해시값을 리턴한다. 따라서 equals와 hashCode를 오버라이딩하지 않고 사용하면 객체의 속성값이 아닌 주소값을 비교한 결과를 리턴하게 된다. // Person 클래스 public class Person { private String name; private int age; public Person(String name, int age) ..
-
[Java] DateTimeFormatter로 LocalDateTime 포맷팅 하기Language/Java 2023. 7. 31. 23:10
로드맵 플랫폼인 RoadMaker를 개발 중, 프론트엔드 팀원이 로드맵 생성 일자를 포맷팅 해달라는 요청을 했다. 이전 포맷은 '2023-07-29T15:40:31.849326'와 같은 ISO-8601 포맷이었는데 이는 너무 길어 UI가 예쁘게 나오지 않았고, 사용자가 읽기도 어려울 것 같았다. LocalDateTime 객체를 원하는 형식으로 포맷팅하려면 'java.time.format.DateTimeFormatter' 클래스를 사용하면 된다. DateTimeFormatter 클래스의 기본 사용법은 다음과 같다. import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; public class DateTimeFormatting {..