Java

JVM과 자바의 메모리 영역에 대한 학습을 정리했다.  우선 전반적인 실행 과정을 간단히 살펴보고, 하나씩 깊게 살펴보자!  1. Java 프로그램의 전반적인 실행 과정 가장 먼저, 자바 컴파일러가 Source Code (.java) 파일을 Java Compiler를 통해 기계어 파일인 Byte Code(.Class)로 변환한다.   그럼 변환된 기계어 파일을 JVM의 클래스 로더가 JVM 메모리 영역으로 가져온다. 클래스 로더는 말 그대로 Class 파일을 불러와서 메모리에 저장하는 역할을 수행한다. 이제 이렇게 JVM에 로딩된 바이트 코드들을 Execution Engine이 명령어 단위로 읽어서 실행한다.  위 실행 과정 중에서 JVM은 필요에 따라 가비지 컬렉션, 스레드 동기화 등으로 메모리와 자원..
equals() 메서드와 hashcode() 메서드에 대해 살펴보겠습니다. equals()우선 equals() 메서드는 두 객체의 값이 같은지를 비교하는 메서드입니다.  그래서 아래 코드의 결과를 보면 다음과 같습니다.String str1 = "Hi";String str2 = "Hi";System.out.println(str1 == str2); // == : 주소 비교 (false)System.out.println(str1.equals(str2)); // equals : 값 비교 (true) String 객체는 heap 영역에 생성되는데 각각의 주소가 달라, 단순 비교를 하면 false가 나오게 됩니다.   그렇다면 여기서 String과 같은 문자열이 아니라, 객체 자료형일 경우에는 equals가 어떻게..
1. Snake game 이란?Snake game은 뱀을 조종하여 먹이를 먹어 길이를 늘리는 게임입니다. 게임의 규칙은 간단합니다.  1. 먹이를 먹으면 뱀의 길이가 증가한다.  2. 뱀의 머리가 뱀의 몸이나 벽에 부딪히면 종료된다.  이를 Java GUI를 통해 구현해보았습니다. 2. Java GUI 코드코드는 아래와 같이 세 가지 파일로 구성됩니다.   1. Main.java  2. GamePanel.java    3. GameFrame.java 1. Main.javapublic class SnakeMain { public static void main(String[] args) { new GameFrame(); }}2. GameFrame.javaimport javax.swin..
정렬 알고리즘을 배우며 병합 정렬, 퀵 정렬 등 다양한 종류의 알고리즘에 대해 배웠습니다. 그렇다면 자바에서 자주 사용하는 Arrays.sort() 는 어떤 알고리즘으로 구현되어있는지 궁금해졌습니다.  구글링과 자바 내부코드를 보면, Arrays.sort는 듀얼 피봇 퀵소트를 사용한다라고 나와있습니다.  Arrays.sort 메서드 내부를 들여다보면서, 듀얼 피봇 퀵소트란 무엇인지 그리고 범위에 따라 어떤 정렬 방식을 적용하는지를 알 수 있었습니다.  Arrays.sort() 내부 들여다보기int[] arr = {1, 3, 4, 2, 1 ,7};Arrays.sort(arr)---result: {1, 1, 2, 3, 4 ,7} 보통 자바에서 배열을 정렬할 때,  java.util.Arrays 클래스의 so..
지난 포스팅에서 자바 제너릭의 도입 배경과 기능을 살펴보았습니다. 이번 포스팅에서는 제너릭의 중요한 특징인 PECS에 대해 살펴보겠습니다.  PECS PECS(Producer Extends Consumer Super)란, Producer(데이터 생산: 조회) Component에서는 extends 를 사용하고 Consumer (데이터 소비: 저장, 수정 등) Component 에서는 super를 사용한다는 의미입니다.  불공변이란? 이것을 보다 자세히 이해하기 위해서는 제너릭의 불공변이라는 특징을 알아야만 합니다. 불공변이란, 서로 다른 제너릭 타입 간에는 상하위 관계가 없다는 것입니다. public class Vehicle {}//Car 클래스public class Car extends Vehicle {..
Java를 공부하며 Generic의 개념과 자료 구조에서 사용하는 것 정도는 어렴풋이 알겠는데, 정확히 왜 필요한지가 궁금했습니다. 이번 포스팅에서 제너릭을  다루어보겠습니다.  제너릭이란? 제너릭(Generic)을 영어 단어 그대로 직역하자면, 클래스 또는 사물 그룹의 특징 또는 이와 관련된 일반적이라는 것이라는 뜻입니다.  자바에서 사용하는 제너릭의 의미도 위와 비슷합니다.  자바에서 제너릭이란, 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 의미합니다.  그래서 구체적인  타입에 대한 정보를 타입의 인스턴스화 시점에 전달해, 객체별로 다른 타입의 자료가 저장될 수 있도록 하는 것입니다.  제너릭의 역할 자바에서는 제너릭을 통해, 다양한 타입의 객체를 다루는 메서드나 클래스에 대해서 ..
동구름이
'Java' 카테고리의 글 목록 (10 Page)