Programming/Java

    [Java] Comparable, Comparator 인터페이스를 사용하여 비교하고자 하는 기준을 정해 객체를 내맘대로 정렬하기

    [Java] Comparable, Comparator 인터페이스를 사용하여 비교하고자 하는 기준을 정해 객체를 내맘대로 정렬하기

    Comparable 인터페이스, Comparator 인터페이스를 사용함으로써 비교하고자 하는 기준을 정해 객체를 내 마음대로 정렬할 수 있다. 말이 조금 어려울 수 있다. Comparable, Comparator 인터페이스는 객체를 정렬시킬 때 꼭 등장하는 놈들이다. Comparable은 '비교할 만한', '견줄만한'하다는 의미를 가지고 Comparator는 '비교 측정기' 라는 의미를 가진 것처럼 이놈들의 용도는 객체를 정렬하기 위한 기준을 정하는 것이다. Comparable 인터페이스에는 compareTo(T o) 메서드가 정의되어 있어 이를 구현해야 하고 Comparator 인터페이스에는 compare(T o1, T o2) 메서드가 정의되어 있어 이를 구현해야 한다. 위 두 개의 메서드를 통해 추측..

    [Java] try-with-resources 구문을 사용하여 할당한 자원을 자동으로 해제하기

    jdk 1.7부터 할당한 자원을 자동으로 해제할 수 있는 try-with-resources 구문이 추가됐다. try-with-resources를 사용하지 않는 경우에는 finally 부분에 작성을 하여 자원을 해제했다. // try-with-resources 구문을 사용하지 않은 경우 FileInputStream fis = null; try { fis = new FileInputStream("file.txt"); } catch (FileNotFoundException e) { e.printStackTrace(); } finally { if (fis != null) { fis.close(); } } try-with-resources 구문을 사용하면 깔끔하게 작성이 가능하다. try ( FileInputSt..

    [Java] 제네릭(Generic) 타입이란?

    JDK 1.5부터 제네릭 타입이 새로 추가되었다. 1. 제네릭의 장점 1. 컴파일 시 강한 타입 체크를 할 수 있다. 2. 캐스팅을 제거한다. 불필요한 타입 변환을 막을 수 있다. 2. 제네릭 타입 제네릭 타입이란 타입을 파라미터로 가지는 클래스와 인터페이스를 말한다. public class 클래스명 { ... } public interface 인터페이스명 { ... } 3. 멀티 타입 파라미터 제네릭 타입은 두 개 이상의 멀티 타입 파라미터를 사용할 수 있다. 두 개 이상이 올 수 있다. 예를 들어 Map을 생성할 때 아래와 같이 사용한다. Map map = new HashMap(); 4. 제네릭 메서드 제네릭 메서드는 매개 타입과 리턴 타입으로 타입 파라미터를 갖는 메서드를 말한다. public 리턴..

    [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..