java 39

Java의 변수에 대해 얇고 넓게 샅샅이 뜯어보자

목차 1. 변수란 무엇인가? 2. 변수의 선언 방법 3. 변수의 타입에 대해 알아보자 3-1. 프리미티브 타입 3-2. 레퍼런스 타입 3-3. 프리미티브 타입과 레퍼런스 타입의 차이 3-4. 래퍼 클래스 3-5. 명시적 타입 변환과 묵시적 타입 변환 4. 변수의 이름은 어떻게 정하지? 5. 변수의 종류 5-1. 지역 변수 5-2. 클래스 변수 5-3. 인스턴스 변수 6. 변수의 초기화 6-1. 기본값 초기화 6-2. 유용한 final 키워드 6-3. 여러가지 초기화 방법들 7. 리터럴? 8. 타입 추론과 var 9. 다수의 변수를 하나로 처리하기 위한 배열 변수(variable)란 무엇인가? 프로그래밍 언어에서의 변수란 '단 하나의 값을 저장할 수 있는 메모리 공간'을 의미한다. 여기서 주목해야할 점은 ..

Technology/Java 2022.08.01

JVM이란 무엇인가? JVM 파헤쳐보기

JVM이란 무엇인가? JVM(Java Virtual Machine)은 자바 가상 머신으로서 자바를 실행하기 위한 가상 기계(컴퓨터)라고 할 수 있다. 이때 가상 기계란 소프트웨어로 구현된 하드웨어로서 가상 컴퓨터는 실제 컴퓨터(하드웨어)가 아닌 소프트웨어로 구현된 컴퓨터라는 뜻으로 생각할 수 있다. 자바로 작성된 프로그램은 모두 이 JVM에서만 실행되기 때문에 자바 프로그램이 실행되기 위해서는 이 JVM이 반드시 필요하다. 이러한 특성으로 자바 프로그램은 OS와 하드웨어에 독립적이라 다른 OS에서도 프로그램의 변경없이 실행이 가능한 장점이 있다. 이러한 특성을 "Write once, run anywhere"라고도 한다. 다만, JVM의 경우에는 운영체제에 종속적이기 때문에 해당 OS에서 실행 가능한 별도..

Technology/Java 2022.07.23

소수를 판별하는 방법들 - Java

소수를 판별하는 방법들 때때로 알고리즘 문제를 풀다 보면 소수를 찾거나 소수의 개수를 구하는 등 특정 수가 소수인지를 판별해야하는 경우가 종종 발생한다. 여기서 소수란 1과 자기 자신으로 나누어 떨어지는 양의 수를 의미한다. 이때 1은 소수가 아니며 2와 3 그리고 5와 같이 1과 자기 자신으로 나누어 떨어지는 수는 소수이다. 이번 글에서는 특정 수가 주어졌을 때 그 수가 소수인지를 판별하는 방법들을 자바 프로그래밍을 통해 알아보고자 한다. 가장 직관적인 소수 판별 방법 public boolean isPrime(int n) { if (n < 2) { return false; } for (int i = 2; i

Algorithm/Basic 2022.06.11

[백준 - 7569] 토마토 - Java

문제 설명 7569번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100, www.acmicpc.net 풀이 회고 해당 문제는 BFS를 이용하여 풀이할 수 있었는데, 익은 토마토를 기점으로 익지 않은 토마토들이 점차 확산되어가며 익어간다는 점 그리고 익는데 며칠이 걸리는지를 구해야 한다는 점에서 BFS를 떠올릴 수 있었습니다. 이때 DFS를 사용하지 않았던 이유는 익은 토마토들이 여러 개 있을 때 익은 토마토들을 기점으로 동시 다발적으로 익지 않은 토마토들로 확산되어 갈텐데 DFS는 우선적으로 하나의 익은 토마토를 기점으로 확산시..

Algorithm/BOJ 2022.05.04

객체 생성 시 인스턴스 메서드는 힙 영역에 없다?

스태틱 영역에 존재하는 인스턴스 메서드 자바에서 new 연산자로 생성된 모든 객체는 JVM 내 단 하나의 힙(Heap)이라는 메모리 영역에 저장되어 모든 스레드가 이를 공유한다. 객체는 속성과 기능, 두 종류의 구성요소로 이루어져 있으며, 이러한 속성과 기능을 그 객체의 멤버라고 한다. 이때 객체 생성자를 통해 객체를 생성하면 클래스에 정의된 속성(인스턴스 변수)과 기능(인스턴스 메서드)이 모두 해당 객체와 함께 힙에 생성되었을 것이라고 생각했었다. 하지만 놀랍게도 인스턴스 변수는 힙 영역(해당 객체 내)에 존재하지만 인스턴스 메서드는 힙 영역에 존재하지 않고 스태틱 영역에 단 하나만 존재한다. 어떻게 이런 일이 일어날 수 있는 것인가? 변수와 달리 메서드는 변하지 않는다. 우선 변수의 특징은 애플리케이..

Technology/Java 2022.03.20