Technology/Java 23

Java의 제어문을 정복해보자!

제어문이란? 제어문은 프로그램의 흐름(flow)을 바꾸는 역할을 한다. 이러한 제어문에는 '조건문'과 '반복문'이 있는데, 조건문은 조건에 따라 다른 문장이 수행되도록 하고, 반복문은 특정 문장들을 반복해서 수행한다. 조건문 조건문은 조건식과 문장을 포함하는 블럭 { }으로 구성되어 있으며, 조건식의 연산결과에 따라 실행할 문장이 달라져 프로그램의 실행 흐름을 변경할 수 있다. 이러한 조건문에는 if문과 switch문 두가지가 있다. if - else if - else문 if문의 조건식은 일반적으로 비교연산자와 논리연산자로 구성되며, else if문을 통해 여러가지 경우의 수에 대해 흐름을 제어할 수 있으며, else문을 통해 그 밖의 다른 모든 경우(반드시 실행)에 대해 흐름을 제어할 수 있다. pri..

Technology/Java 2022.08.06

Java의 다양한 연산자(operator) 다루기

목차 1. 연산자와 피연산자 2. 연산자의 종류 2-1. 산술 연산자 2-2. 관계 연산자 2-3. 논리 연산자 2-4. 비트 연산자 2-5. instanceof 연산자 2-6. 대입(=) 연산자 2-7. 화살표(->) 연산자 2-8. 3항 연산자 3. 연산자의 우선 순위와 결합 규칙 3-1. 연산자의 우선 순위 3-2. 연산자의 결합 규칙 연산자와 피연산자 연산자(operator)는 사칙 연산(+, -, *, /), 나머지 연산(%), 비교 연산자 등 '연산을 수행하는 기호'를 말한다. 이때 연산자가 연산을 수행하려면 변수, 리터럴, 수식 등 반드시 '연산의 대상'이 있어야 하는데, 이를 '피연산자(operand)'라고 한다. 이처럼 연산자는 피연산자로 연산을 수행하고 이후에는 항상 결과값을 반환한다는..

Technology/Java 2022.08.04

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

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

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

Technology/Java 2022.03.20