Java

· Java
https://www.acmicpc.net/problem/2824 문제를 풀다가 `BigInteger`를 처음 만났다. 일반적으로 `int`, `long`으로 충분하지만, 매우 큰 수를 다뤄야 하는 경우가 있어 정리해보려고 한다.BigInteger란?`BigInteger`는 불변의 임의 정밀도 정수로 자바의 기본 정수형은 메모리 크기가 고정되어 있어 이보다 더 큰 값들을 다를 때 사용한다.범위`int` (4 byte): -21억 ~ 21억`long` (8 byte): -922경 ~ 922경`BigInteger`: -2^(Integer.MAX_VALUE) ~ 2^(Integer.MAX_VALUE) (약 6억 자리 이상)기본 정수형들은 JVM에서 Stack에 저장되지만 `BigInteger`은 참조값이 St..
· Java
JVM이 왜 나왔는지를 알기 위해선 자바의 철학을 알아야 한다. 자바는 "Write Once, Run Anywhere"라는 슬로건으로 어느 운영체제에서도 실행 가능하다. 이를 실제로 가능하게 하는 주체는 JVM이다. 따라서, JVM의 구성요소와 Java 파일 실행 과정을 순차적을 공부할 예정이다.JVM(Java Virtual Machine)이란?JVM은 자바 프로그램을 실행하기 위한 가상 머신으로 운영체제 위에서 동작하며, 자바의 '플랫폼 독립성'을 제공하는 요소이다. 플랫폼 독립성`.class`의 바이트코드는 특정 CPU의 기계어가 아니라, JVM의 명령어 집합OS마다 JVM 구현이 다르게 존재하며, 각각의 JVM이 바이트코드를 OS/CPU에 맞춰서 실행 ➡️ 같은 `.class`가 여러 OS에서 실행..
· Java
기능 구현보다 이 기능을 어떻게 구현해야 더 좋은 구현이 될까를 고민하는 지금 Java 프로그램을 실행하는 JVM을 알아야 좋은 구현을 진행할 것이라는 생각이 들었다. 따라서, JVM을 공부해보려고 한다. JDK(Java Development Kit)와 JRE(Java Runtime Environment)JVM을 공부하는데 왜 JDK와 JRE가 나올까?이는 JDK와 JRE에 JVM이 포함되어 있고, Java를 개발하기 위해선 단순히 JDK 안에 있는 `javac`(컴파일러)가 필요하기 때문이다. 또, JVM은 혼자서 돌아가지 못하며, `String`, `System`, `ArrayList` 같은 기본 클래스 파일들이 있어야 코드를 실행할 수 있는데, 이 파일들이 바로 JRE에 들어있기 때문이다. JVM이..
· Java
프로그래머스에서 진행하는 PCCP 정기 시험을 친구들과 같이 봤다. 싸피 과정이 끝나고 우리의 실력이 객관적으로 어느 정도인지 궁금했기 때문이다. 최근엔 기업 코테도 뜸했던 차에 PCCP 정기 시험으로 우리 수준을 점검해보기로 했다. PCCP(Programmers Certified Coding Professional)란?그렙에서 만든 코딩전문역량인증 자격증이다. 그렙은 프로그래머스, 모니토를 운영중인 회사이다. 과거엔 채용사항에 우대가 좀 있던 것 같지만 최근엔 많이 사라졌다고 알고 있다. 시험 안내시험시간: 120분문항수: 4문항시험과목: Python, JavaScript, Java, C, C++, C# (나는 Java를 선택했다.)방식: 비대면 (모니토 앱 사용)기존 기업 코테에서 익숙하게 쓰던 모니..
· Java
프로젝트를 진행하며, Redis Stream에 객체를 넣을 때 직렬화를 해서 넣지 않아 에러가 발생했다. 평소에도 직렬화, 역직렬화를 듣긴 했지만 마주할 일이 없었기 때문에, 이번 기회에 정리해보고자 한다. 직렬화란?자바 직렬화는 JVM 힙 메모리에 있는 객체 상태(인스턴스 필드 값)를 바이트 시퀀스로 변환하는 과정이다. 메모리의 객체는 객체 그래프 구조인데, 이를 네트워크로 전송하거나 파일로 저장하려면 연속된 바이트 시퀀스로 변환해야 한다. 바이트 스트림은 뭘까?바이트 스트림은 데이터를 연속된 바이트로 전송 방식이다. 자바는 모든 입출력을 '스트림'이라는 추상화로 다루는데, 이는 데이터가 흐르는 단방향 통로와 같다. 스트림을 통해 바이트 시퀀스가 소스에서 목적지로 순차적으로 전달된다.모든 컴퓨터 ..
· Java
다이아몬드 문제란?다이아몬드 문제는 객체지향 프로그래밍에서 다중 상속을 지원하는 언어에서 발생할 수 있는 모호성 문제로, 다이아몬드 모양의 상속 계층 구조를 가질 때 발생한다. 위 클래스 다이어그램과 같은 상속 구조에서 D 클래스의 인스턴스가 A 클래스에서 정의된 메서드나 속성에 접근할 때, B를 통해 접근해야 할지 C를 통해 접근해야 할지 모호해지는 문제가 발생한다. 자바에서의 다이아몬드 문제다이아몬드 문제는 크게 두 가지 이슈를 가진다: 메서드 호출의 모호성: D에서 A의 메서드를 호출할 때, B의 구현과 C의 구현 중 어떤 것을 사용해야 할지 모호하다. 필드 중복 문제: A에 인스턴스 변수가 있다면, B와 C를 통해 각각 중복 상속되어 D는 동일한 A 필드의 두 복사본을 갖게 된다. 이로 인해, ..
· Java
프로그래밍에서 두 객체를 비교할 때 어떤 기준으로 비교할지 명확해야 한다. "같다"라는 것이 무엇을 의미하는지 정의해야 하는데, 이때 동일성과 동등성은 객체를 비교할 때 중요한 개념이다.자바에서는 이 두 개념을 `equals()`와 `==`연산자를 통해 구분할 수 있다. 이 개념을 설명하기 전에 `==`연산자는기본 타입을 비교할 때는 값 자체를, 참조 타입을 비교할 때는 객체의 메모리 주소를 비교한다는 사실을 알고 가자.   동일성이란?동일성은 두 객체가 메모리 상에서 동일한 주소를 참조하고 있는지를 비교하는 개념이다. 자바에서는 `==`연산자를 사용하여 객체의 동일성을 비교한다. 두 객체를 `==`연산자로 비교하면, 힙 메모리에서 같은 객체인지를 확인한다. Object obj1 = new Object(..
· Java
equals()`equals()` 메서드는 어떤 다른 객체가 이 객체와 동등한지를 나타낸다. `null`이 아닌 참조 값 `x`와 `y`에 대해 이 메서드는 `x`와 `y`가 같은 객체를 참조하는 경우(`x == y`가 `true`인 경우)에만 `true`를 반환한다. 이 메서드를 오버라이딩할 때는 일반적으로 `hashCode()` 메서드도 함께 오버라이딩해야 한다. 이는 `hashCode()` 메서드의 일반적인 계약을 유지하기 위함인데, 이 계약은 동등한 객체들은 동등한 해시 코드를 가져야 한다고 명시한다. 다음은 java8 references의 `equals()` 메서드 부분의 일부를 최대한 원문으로 번역해보았다.  기본 타입이 아닌 참조 타입의 객체를 비교할 때, `equals()` 메서드를 사용한..
Ukjong
'Java' 카테고리의 글 목록