반응형 Java14 JIT가 컴파일 최적화를 하는 과정 JIT (Just-In-Time) 이란?JIT는 JVM의 구성요소로써 바이트 코드를 런타임 환경에서 기계어로 변환하는 역할을 한다. 또한 인터프리터와 함께 사용되어 인터프리터 과정 중에 프로그램의 동작을 모니터링하고 최적화 대상인, 반복되는 코드(Hot-spot-code)를 식별해 둠으로써 해당 코드를 기계어로 변환하여 성능을 향상시키는 역할을 한다. JIT 컴파일러의 주요 특징- 실시간 컴파일: Java는 처음에 소스 코드를 바이트 코드로 컴파일하고 이 바이트코드는 JVM에서 실행된다. - 최적화 : JIT는 실행중에 코드 사용 패턴을 분석하여 동적 최적화를 수행한다. - 성능향상 : JIT는 CPU에 맞는 기계어를 생성하기 때문에 인터프리터 방식보다 훨씬 빠르다. 하지만 초기 컴파일 과정에서 오버헤드.. 2025. 3. 26. BigDecimal의 longValue(), longValueExact() 차이 BigDecimal 클래스에는 longValue()와 longValueExact()라는 두 가지 메서드가 있다. 이 두 메서드는 BigDecimal 값을 long 타입으로 변환하는 데 사용되지만, 중요한 차이점에 대해서 알아본다. longValue()BigDecimal 값을 long 타입으로 변환한다.소수점 이하를 무시하고 BigDecimal의 정수 부분만 long으로 변환한다.변환 과정에서 소수점 이하의 값이 버려지더라도 예외를 발생시키지 않는다. 또한, 변환 결과가 long 타입의 범위를 초과하더라도 예외를 발생시키지 않으며, 잘못된 값이 반환될 수 있다.import java.math.BigDecimal;public class BigDecimalExample { public static void.. 2025. 3. 25. 추상 클래스와 인터페이스 먼저 클래스는 크게 일반 클래스와 추상 클래스로 나뉜다. 인터페이스나 추상 클래스를 사용하는 이유는, 설계 시 인터페이스나 추상 클래스를 잘 설계해 두면 개발과정에서 기능 구현에만 집중할 수 있기 때문이다. - 추상 클래스 ( Abstract Class ) 추상 클래스는 클래스 내 '추상 메서드'가 하나 이상 포함되거나 abstract로 정의된 경우이다. 추상 클래스에 기본적으로 공통된 기능들은 구현해 두고, 그렇지 않은 기능들은 추상 메서드로 남겨두는 식으로 기능들을 확장시키는 용도로 사용된다. - 인터페이스 ( Interface ) 반면 인터페이스는 그저 추상 메서드가 포함된 클래스가 아닌 모든 메서드가 추상 메서드로 이루어져 있는 걸 뜻한다. 인터페이스 내의 모든 메서드는 abstract 메서드이기.. 2023. 3. 7. 자바의 디폴트 생성자, 복사 생성자 (깊은 복사&얕은 복사) 디폴트 생성자 매개변수가 없는 생성자, 또는 매개변수가 있지만 모두 디폴트 값만 있는, 디폴트 인수만 포함하고 있는 생성자이다. 만약 클래스를 선언할 때 생성자를 선언하지 않으면 컴파일러는 아무런 일도 하지 않는 디폴트 생성자를 만들게 되고, 객체를 생성하게 되면 데이터 멤버가 초기화되지 않은 상태로 만들어진다. 복사 생성자 ( 깊은 복사 & 얕은 복사 ) 자신과 같은 클래스의 인스턴스를 매개변수로 받는 생성자이다. - 얕은 복사 name 변수를 가진 Student 클래스를 만들고 newStudent에 담았다. newStudent에서 이름을 변경했더니 기존 객체의 값도 바뀐 걸 확인할 수 있다. 위의 경우 newStudent로 완전히 복사된 것이 아니라 참조만 복사되었기 때문에 newStudent의 값이.. 2023. 3. 6. JUnit, AssertJ를 활용한 Test 연습 기존 Main method를 통한 테스트는 몇 가지 문제점이 있었다. 이 문제점을 해결하기 위해 등장한 도구가 JUnit이다.Main method 테스트의 문제점Production code와 Test code가 클래스 하나에 존재하여 클래스 크기가 커지고 복잡도가 증가한다.Test code가 실제 서비스에 같이 배포되버린다.main method 하나에서 여러 개의 기능을 테스트하기 때문에 복잡도가 증가한다.method 이름을 통해 어떤 부분을 테스트하는지 의도가 불분명하다.테스트 결과를 개발자가 수동으로 확인해야 한다.테스트 연습 1 (assertThatThrownBy 연습)예외를 발생시켜야만 아래 테스트가 통과된다.@Test@DisplayName("예외 발생 시 StringIndexOutOfBounds.. 2023. 2. 20. 클린코드는 왜 중요한가 객체 지향 설계에서 어려운 점은 소스 코드 중 문제가 있는 부분을 찾는 것이고, 어떻게 리팩터링을 할 것인지는 그 다음 이슈이다.대신 코딩해주는 AI들이 떠오르는 화두이지만 그렇다고 하더라도 코드는 항상 존재할 수밖에 없다. 그러므로 개발자는 클린 코드에 항상 관심을 가져야 한다. 클린 코드를 고려하지 않고 개발하면 당장은 빠르게, 생산성 높게 개발할 수 있겠지만 시간이 지날수록 생산성이 떨어지기 마련이다.결국엔 갈수록 치우기 어려운 거대한 똥을 쌓아나가는 셈이다.실무자는 현저하게 떨어진 생산성에 고통받아 재설계를 고려하며 제안하게 되고 관리자는 악화되는 상황에 어쩔 수 없이 뒤늦게 재설계를 허락한다. 클린 코드는 운동과도 같다. 하루 이틀 연습하여 구현한다고 한들 소용없다. 지속적으로 훈련하며 적용시켜.. 2023. 2. 20. 이전 1 2 3 다음