☕️ java
-
일급 컬렉션☕️ java 2023. 10. 24. 02:56
🧑🏻💻 이동욱님의 글을 보고 공부용으로 정리했습니다. ⭐ 일급 컬렉션 Collection을 Wrapping 하면서, 그 외 다른 멤버 변수가 없는 상태를 일급 컬렉션이라 한다. Map map = new HashMap(); map.put("1", "A"); map.put("2", "B"); map.put("3", "C"); public class GameRanking { private Map ranks; public GameRanking(Map ranks) { this.ranks = ranks; } } 🌟 Wrapping의 이점 비지니스에 종속적인 자료구조 Collection의 불변성 보장 상태와 행위를 한 곳에서 관리 이름이 있는 컬렉션 1️⃣ 비지니스에 종속적인 자료구조 📖 숫자 야구의 2가지 조건 ..
-
🧪 JMH (Java Microbenchmark Harness)☕️ java 2023. 10. 23. 13:49
자바에서 제공하는 Random 함수에 대해 공부하는 과정에서 java.util.Random 과 java.util.concurrent.ThreadLocalRandom 의 성능을 비교해보고자 JMH라는 개념을 도입하고자 공부를 하게 되었다. ⭐ JMH 📍 JMH(Java Microbenchmark Harness)는 openjdk에서 만든 라이브러리이다. - JVM 상에서 실행되는 코드의 성능을 측정하기 위한 벤치마크 도구이다. 📍 성능 측정 코드 실행 시간 메모리 사용량 GC 활동 등등 ⇒ 측정하고 수행하여 실행 결과에 대한 통계를 제공한다. 📖 벤치마크 (Benchmark) 컴퓨터 시스템, 소프트웨어, 하드웨어 등의 성능을 측정하고 비교하기 위해 사용되는 표준화된 기준이나 테스트 🔍 Annotation 1..
-
🆚 Random 함수 비교☕️ java 2023. 10. 23. 12:36
숫자야구 프로그램을 만들면서 Java에서 제공하는 Random 함수들이 어떤 것들이 있는지 궁금하고 어떤 것을 사용해야할지 궁금했다. 1️⃣ java.util.Random 💡 java.util 패키지에 있는 Random 클래스를 사용하는 방법 - 인스턴스를 생성해서 사용 🖥️ 사용 2가지 객체 생성 방법 기본 생성자를 사용하는 방법 long 타입의 시드를 인자로 받는 생성자를 사용하는 방법 // 기본 생성자 Random random = new Random(); // long 타입의 시드를 인자로 받는 생성자 Random random = new Random(10); // 난수 범위 지정 int randomNumber = random.nextInt(max - min) + min; ⚠️ 주의할 점 long 타..
-
DAO DTO / VO☕️ java 2023. 3. 10. 14:24
📌 DAO 💡 DAO (Data Access Object) - DB의 data에 접근하기 위한 객체로 직접 DB에 접근하여 데이터를 삽입, 삭제, 조회 등 조작할 수 있는 기능을 수행 실제로 DB에 접근하는 객체 등장 배경 애플리케이션에서 데이터베이스(MySQL, Oracle, … 등)에 접근하기 위해서는 각 벤더에서 제공하는 API를 통해서 접근하면 된다. ⚠️ 하지만, 이런 방법에는 문제가 존재 구현체와 로직에 강한 결합이 생긴다. DB로 MySQL를 사용하고 있었다고 가정했을 때, DB를 Oracle로 바꿔야 하는 요구사항이 생기면 MySQL의 API를 사용한 모든 로직을 Oracle의 API를 사용하도록 변경해야 한다 이는 변경에 자유롭지 못하는 문제를 가진다 - OCP 위반 레이어가 깨짐 표현계..
-
[Java] 실수 표현 - 고정소수점, 부동소수점☕️ java 2023. 3. 7. 13:40
📌 실수의 메모리 표현 컴퓨터 메모리는 2진수 체계를 기반으로 데이터를 저장한다. 실수 역시 2진수 메모리 비트로 표현해야 한다 → 정수에 비해 복잡 컴퓨터에서 실수를 표현하는 방식으로는 대표적으로 고정 소수점 방식, 부동 소수점 방식으로 나눌 수 있다. 🔍 고정 소수점 방식 💡 고정 소수점 방식 (Fixed-Point Number Representation) 메모리를 정수부와 소수부로 고정으로 나누고 지정하여 처리하는 방식 부호 비트 - 양수 / 음수를 표현하기 위한 비트 0 : 양수 1 : 음수 예시 5.625 = 4 + 1 + 0.5 + 0.125 = 2^2 + 2^0 + 2^{-1} + 2^{-3} = 101.101(2) 이진수 실수 계산 결괏값을 각각 정수부, 소수부 메모리 비트에 넣는다. 장 ..
-
BigDecimal ❓☕️ java 2023. 3. 7. 11:05
❓BigDecimal 🧐 사용하는 이유 @Test void test() { double a = 100.0000000005; double b = 10.0000000004; assertThat(a - b).isEqualTo(90.0000000001); } 결과 expected: 90.0000000001 but was: 90.00000000009999 📖 왜 실패를 할까? 자바는 IEEE 754 부동 소수점 방식을 사용한다. 따라서, 정확한 실수를 저장하지 않고 최대한 완벽에 가깝기 바라는 근사치 값을 저장한다. 금융권 같은 사소한 값 차이가 중요한 곳에서 double 타입을 사용하게 되면 문제가 될 수 있다 이런 문제점을 해결하기 위해 부동 소수점 방식이 아닌 정수를 이용해 실수를 표현하는 java.math..
-
[Java] String / StringBuffer / StringBuilde☕️ java 2023. 3. 3. 21:16
Java에서 문자열을 다루는 대표적인 클래스로는 String, StringBuffer, StringBuilder가 있다. 연산 횟수가 많아지거나 멀티스레드, Race condition 등의 상황이 발생한다면 각 클래스의 특징을 이해하고 상황에 맞는 클래스를 사용하는 것이 중요하다!! 📌 String vs StringBuffer / StringBuilder 💡 String 과 StringBuffer / StringBuilder 클래스의 가장 큰 차이점 String은 불변 속성이라는 것!! String은 불변 ❓ String str = "hello"; str = str + " world!"; 위 코드에서 str이 가리키는 곳에 “hello world!” 가 저장되어 있다고 생각할 수 있다. 하지만, 기존 “..
-
[Java] Static 과 Final☕️ java 2023. 3. 3. 19:27
📌 Static Java에서 Static 키워드를 사용한다는 것은 메모리에 한번 할당되어 프로그램이 종료될 때 해제되는 것을 의미 GC가 관리 ❌ 일반적으로 만든 Class는 Static 영역에 생성 new 연산을 통해 생성한 객체는 Heap 영역에 생성 📖 GC Heap 영역의 메모리는 GC를 통해 수시로 관리받는다. 하지만 Static 키워드를 통해 Static 영역에 할당된 메모리는 객체가 공유하는 메모리라는 장점이 있지만 GC의 관리 영역 밖이다. Static을 자주 사용하면 프로그램이 종료될 때까지 메모리가 할당된 상태로 존재한다. 자주 사용시 문제가 될 수 있다. 📌 Static 변수 - Static 변수는 클래스 변수이다. - 객체를 생성하지 않고도 Static 자원에 접근이 가능하다. 💡 ..