전체 글

전체 글

    [Java] JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가

    [Java] JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가

    오늘의 포스팅 목표는 자바 소스 파일(.java)을 JVM으로 실행하는 과정을 이해하는 것입니다. 목차 1. JVM이란 무엇인가 2. 컴파일 하는 방법 3. 실행하는 방법 4. 바이트코드란 무엇인가 5. JIT 컴파일러란 무엇이며 어떻게 동작하는지 6. JVM 구성 요소 7. JDK와 JRE의 차이 1. JVM이란 무엇인가 JVM은 Java Virtual Machine의 줄임말로 자바가상머신이라고도 불립니다. JVM은 어떠한 환경(운영체제)에서도 자바 프로그램이 실행될 수 있도록 하는 프로그램입니다. 이는 자바의 기본 원칙인 WORA(Write Once, Run Anywhere)을 지키기 위함입니다. 과거에는 같은 프로그램인데도 불구하고 Windows, Mac, Linux 등의 운영체제에 맞게 다르게 작..

    [Java] 래퍼 클래스와 박싱, 언박싱에 대해 알아보자

    [Java] 래퍼 클래스와 박싱, 언박싱에 대해 알아보자

    안녕하세요! 이번 포스팅은 래퍼클래스, 박싱, 언박싱에 대해 알아보겠습니다. 1. 래퍼 클래스(Wrapper Class) List list = new ArrayList(); 위의 자바 코드를 보면 제네릭을 사용하고 있습니다. 제네릭 타입에는 원하는 자료형을 지정할 수 있는데 기본 자료형인 원시형은 넣지 못합니다. 제네릭 타입에 넣기 위해서는 원시형(기본형)을 담아낼 수 있는 클래스를 넣어야 합니다. 즉, 원시형(Primitive Type)을 객체화한 것을 넣어야 하는데 이를 래퍼 클래스(Wrapper Class)라고 합니다. 래퍼 클래스의 종류는 다음과 같습니다. Boolean Character Double Float Integer Long Short Byte Boolean 래퍼 클래스는 bool..

    [Java] 제네릭(Generic)을 예시를 통해 알아보자

    [Java] 제네릭(Generic)을 예시를 통해 알아보자

    안녕하세요. 이번 포스팅은 제네릭(Generic)입니다. 자바 과거 버전에서는 Object 자료형을 많이 사용했는데 이를 사용할 때 몇 가지의 문제점이 존재했습니다. 1. 형변환 문제 Object 자료형을 반환하고 목적에 맞는 자료형에 형변환을 할 때 실수하면 에러가 난다. 2. 목록에 아무나 들어갈 수 있는 문제 Object 자료형이기 때문에 어떠한 자료형을 넣어도 들어갈 수 있다. 3. 코드의 가독성 문제 Object 자료형을 형변환을 할 때 문장이 깔끔하지 않아 읽기의 어려움이 존재한다. 이러한 문제점들을 해결하기 위해 Object 자료형을 사용하기를 지양하면서 제네릭의 개념이 등장했습니다. 제네릭(Generic)이란? 제네릭은 컬렉션에서 많이 사용됩니다. , , 와 같은 표현방식을 많이 보..

    [Java] 인터페이스에 대해 알아보자

    [Java] 인터페이스에 대해 알아보자

    자바에서는 소스코드를 고쳐 쓰는 방식에는 두 가지가 존재합니다. 1. is a 상속(has a 상속이 아니다)을 통해 고쳐쓰는 방법 is a 상속 방식은 소스코드가 어떻게 고쳐쓰여질지 예측하지 못하여 자식 클래스에서 오버라이드하여 고쳐씁니다. 2. 인터페이스를 통해 고쳐쓰는 방법 인터페이스 방식은 소스코드가 어떻게 활용될지 예측할 수 있는 방식입니다. 이번 포스팅에서는 인터페이스에 대해 알아보겠습니다. 예전에는 인터페이스를 추상클래스와 비교하면서 다중 상속, 단일 상속, 메서드를 강제적으로 구현해야 하는 강제성이 누가 더 높은지를 중점적으로 공부했습니다. 하지만 이렇게 피상적으로만 알고 있다보니 막상 구현을 할 때는 건드릴 수가 없었습니다. 어떠한 경우에 추상클래스와 인터페이스를 사용해야 하는지도 모른채..

    [Java] 쓰레드(Thread)란 무엇일까? - 기초

    [Java] 쓰레드(Thread)란 무엇일까? - 기초

    쓰레드(Thread)를 알아보기에 앞서 프로세스와 멀티태스킹에 대해 알아보겠습니다. 프로세스(Process) 프로세스는 실행중인 프로그램이다. 즉, 메모리에 올라간 상태이다. 우리가 웹 서핑을 하기 위해 크롬 아이콘을 더블 클릭하는 순간 하나의 프로세스가 동작되는 것이다. 멀티태스킹(Multi-Tasking) 멀티태스킹은 여러 개의 프로그램을 동시에 띄우는 것을 의미한다. 우리는 컴퓨터로 음악(프로세스)을 들으면서 워드 문서작업(프로세스)을 동시에 할 수 있다. 사실 우리의 눈으로는 음악과 문서작업을 동시에 처리하는 것처럼 보이지만 그렇지 않다. 하나의 코어가 동작하기 위한 프로세스들을 빠르게 왔다갔다 하면서 일을 처리하는데 속도가 너무 빠르기 때문에 우리 눈에는 동시에 하는 것처럼 보일 뿐이다. 쓰레드..

    [Java] 캡슐화와 은닉성에 대해 알아보자

    [Java] 캡슐화와 은닉성에 대해 알아보자

    안녕하세요. 즐거운 추석 연휴 기념으로 캡슐화와 은닉성에 대해 알아보는 시간을 갖도록 하겠습니다. 우선 캡슐화에 대해 설명을 하기에 앞서 자바에서 캡슐화를 하지 않았을 경우 생기는 문제점을 확인해보겠습니다. 다음과 같은 예제가 있습니다. public class NumList { int size; int[] nums; } public class Program { public static void main(String[] args) throws IOException { NumList list = new NumList(); list.size = 0; list.nums = null; load(list); int total = sum(list); System.out.println("합계: " + total); }..

    [Java] String / StringBuilder / StringBuffer의 차이점은 무엇일까?

    [Java] String / StringBuilder / StringBuffer의 차이점은 무엇일까?

    이번 포스팅에서는 String, StringBuilder, StringBuffer의 특징과 각각의 차이점에 대해 알아보겠습니다. String 자바에서 String은 불변성을 갖고 있습니다. 즉, 문자열 객체는 최초에 생성되면 절대로 그 값이 변하지 않습니다. String str = "hello"; str = "hi"; 위의 예시에서는 내부적으로 다음과 같이 동작합니다. 즉, 이 상태에서는 "hello"와 "hi" 객체가 힙 영역에 생성되어 있는 상태입니다. str 변수는 "hello" 객체를 참조하다가 "hi"를 참조하게 됩니다. "hello" 객체는 사라지지 않으며 Heap에 원본 그대로 남아있습니다. 그럼 이 코드는 어떨까요? String str = "hello"; str = "hello" + " w..

    [Java] Enum 클래스에 대해 알아보자

    [Java] Enum 클래스에 대해 알아보자

    안녕하세요. 이번 포스팅에서는 enum 클래스에 대해 알아보겠습니다. enum enum은 enumerate를 줄여쓰는 단어로 '열거하다'라는 의미를 갖고 있습니다. JDK1.5 버전부터 기존의 C언어와 C++에서 사용된 열거체보다 더욱 향상된 성능의 열거체를 정의한 Enum 클래스를 사용할 수 있게 되었습니다. 우리는 프로그래밍을 하다보면 공통적으로 한정된 데이터를 다루는 경우가 많습니다. 예를 들자면 '계절', '태양계 행성', '요일' 등이 있습니다. 이렇게 한정된 데이터는 하나의 열거형으로 묶어주면 편리하게 관리할 수 있습니다. Enum 클래스 선언 방법 클래스 외부에서 선언하는 방법 enum Season { SPRING, SUMMER, FALL, WINTER } 클래스 내부에서 선언하는 방법 pu..

    컴파일러와 인터프리터의 차이점을 알아보자

    컴파일러와 인터프리터의 차이점을 알아보자

    안녕하세요. 이번 포스팅에서는 컴파일러와 인터프리터에 차이와 장단점에 대해서 알아보겠습니다. 컴파일러와 인터프리터는 사람이 이해할 수 있는 고급언어로 작성된 소스 코드를 기계가 이해할 수 있는 기계어로 번역한 후에 프로그램을 실행하는 것입니다. 그럼 차이점은 무엇일까요? 컴파일러(번역기) 컴파일러는 사람이 고급 언어를 작성을 하면 해당 고급 언어를 한 번에 번역을 합니다. 그렇기 때문에 줄 단위로 번역을 하는 인터프리터에 비해 번역 시간은 오래 걸리는 편입니다. 하지만, 컴파일러는 한 번 번역을 하면 실행 파일이 생성이 되어 다음에 실행을 할 때 기존에 생성되었던 실행 파일을 실행하기 때문에 인터프리터에 비해 실행 시간이 빠른 편입니다. 인터프리터(실행기) 인터프리터는 컴파일러와는 다르게 한 줄 한 줄씩..

    [오라클 데이터베이스] 이너 조인(INNER JOIN)이란? (ANSI)

    [오라클 데이터베이스] 이너 조인(INNER JOIN)이란? (ANSI)

    * 오라클 자체 조인문이 아닌 ANSI 쿼리문으로 진행했습니다. 조인은 두 개 이상의 테이블을 서로 묶어 하나의 결과 집합으로 만들어 내는 것을 의미한다. 조인의 종류에는 INNER JOIN, LEFT/RIGHT/FULL OUTER JOIN, SELF JOIN 등이 있는데 이번 포스팅에서는 INNER JOIN에 대해 알아보겠습니다. 아래와 같은 테이블 두 개가 있다고 가정하자. 왼쪽은 MEMBER 테이블이고 오른쪽은 NOTICE 테이블이다. NOTICE 테이블의 WRITER_ID 컬럼은 MEMBER 테이블의 ID 컬럼을 참조하고 있는 상태이다. MEMBER 테이블은 NOTICE 테이블을 만들어냈기 때문에 '부모 테이블'이라고 한다. MEMBER 테이블과 NOTICE 테이블을 시각적으로 합치기 위한 방법은..