반응형 Back19 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. 문자열 계산기 1차 구현 사실 문제만 보고서 어떻게 구현해야 할지 몰라 처음에는 테스트코드만 짜서 만지작 거렸다. 도저히 이렇게 하는 건 아닌 것 같다 싶어서 다른 분들이 하신 걸 참고했는데 역시나 클래스를 설계해서 우선 구현하고 그다음에 테스트를 통해 검증하는 거였다. 이제야 알았다 하더라도 알고리즘이 나한테는 어려워서 씨름하다가 모르는 건 찾아가면서 나름 내 코드로 구현해 봤다. 당연히 당연히 정답은 아니고 피드백도 받기 전이고 그냥 내가 각 단계마다 어떤 생각으로 구현했는지 기록하기 위함이다. 개선할 점이나 지적질은 너무 환영입니다. 요구사항을 간단하게 요약하면 "1 + 2 * 3 / 3"와 같은 문자열을 일반 사칙연산의 우선순위를 무시하고 나열된 순서대로 계산 후 결과를 출력하는 거다. 우선 최대한 객체 지향 프로그래밍을.. 2023. 2. 22. JUnit, AssertJ를 활용한 Test 연습 기존 Main method를 통한 테스트는 몇 가지 문제점이 있었다. 이 문제점을 해결하기 위해 등장한 도구가 JUnit이다. Main method 테스트의 문제점 Production code와 Test code가 클래스 하나에 존재하여 클래스 크기가 커지고 복잡도가 증가한다. Test code가 실제 서비스에 같이 배포되버린다. main method 하나에서 여러 개의 기능을 테스트하기 때문에 복잡도가 증가한다. method 이름을 통해 어떤 부분을 테스트하는지 의도가 불분명하다. 테스트 결과를 개발자가 수동으로 확인해야 한다. 테스트 연습 1 (assertThatThrownBy 연습) 예외를 발생시켜야만 아래 테스트가 통과된다. @Test @DisplayName("예외 발생 시 StringIndexO.. 2023. 2. 20. 이전 1 2 3 4 다음