728x90

자바 120

[Java] GC 종류별 차이

GC(Garbage Collector) 란? Java로 개발을 하면서 Memory 관련 Error는 접할 수 밖에 없는 문제이며, 해당 에러가 운영환경에서 발생하였을경우 단계적으로 서비스 장애까지 이어질수 있다고한다. 그렇기때문에 메모리를 관리해주는 가비지 컬렉터. 즉, GC의 개념에 대해서 이해를 하고, 동작원리를 아는것은 중요하다. Java에서 객체가 생성되면 해당 객체는 JVM의 Heap영역의 메모리를 점유하게 되고, 해당 객체는 현재 참조 되지 않더라도 메모리 공간을 점유 한다. 이때, 메모리의 공간은 한정적이기 때문에 사용하지 않는 객체가 차지한 공간을 정리해주지 않으면 메모리 공간은 부족해지고 결국은 에러가 발생 할 수 밖에 없다. Java는 JVM을 통하여 작동이 되는데 Java의 특징중 하..

JAVA 2022.03.24

[Java] 리플렉션(Reflection)이란?

Reflection(리플렉션)이란? 구체적인 클래스 타입을 알지 못해도 그 클래스의 메소드, 타입, 변수들에 접근할 수 있도록 해주는 자바 API이다. 런타임에 지금 실행되고 있는 클래스를 가져와서 실행해야하는 경우. 동적으로 객체를 생성하고 메서드를 호출하는 방법으로 Java의 리플렉션은 클래스, 인터페이스, 메소드들을 찾을 수 있고, 객체를 생성하거나 변수를 변경하거나 메소드를 호출할 수 있다. Reflection을 사용하는 경우는 코드를 작성할 시점에 어떤 타입의 클래스를 사용할지는 모르지만, 런타임 시점에 지금 실행되고 있는 클래스를 가져와서 실랭해야하는 경우 프레임워크나 IDE에서 이런 동적인 바인딩을 이용한 기능을 제공한다. 흔히 IDE의 종류중에 하나인 인텔리제이의 자동완성 기능. 그리고 스..

JAVA 2022.03.01

[Java] 제네릭 타입 컴파일 Generic type erasure

제네릭 타입을 컴파일하면 class 파일에 제네릭이 남아있을까? 제네릭(Generic) 데이터 타입을 일반화(Generalize)하는 것을 의미. 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시 미리 지정하는 방법.(즉, 컴파일시 미리 타입검사를 수행하는 방법) → 클래스나 메소드 내부에서 사용되는 객체의 안정성을 높일 수 있음. → 반환값에 대한 타입 변환 및 타입 검사에 들어가는 노력을 줄일 수 있음. Row Type 제네릭 타입에서 타입 매개변수를 전혀 사용하지 않을때를 의미. 자바 제네릭이란? ☜ Click! Java Generics Type Erasure(제네릭 타입소거) 구체화 vs 비구체화 구체화 타입(reifiable type) : 자신의 타입 정보를 런타임에도 알고 있는것. 배열..

JAVA 2022.02.24

[Java] 자바 제네릭이란? Java Generic

자바 제네릭(Generic)이란? 자바에서 제네릭(generic)이란 데이터의 타입(data type)을 일반화한다(generalize)는 것을 의미한다. 제네릭은 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하는 방법이다. 이렇게 컴파일 시에 미리 타입 검사(type check)를 수행하면 다음과 같은 장점을 가질 수 있다. 1. 클래스나 메소드 내부에서 사용되는 객체의 타입 안정성을 높일 수 있음. 2. 반환값에 대한 타입 변환 및 타입 검사에 들어가는 노력을 줄일 수 있음. JDK 1.5 이전에서는 여러 타입을 사용하는 대부분의 클래스나 메소드에서 인수나 반환값으로 Object 타입을 사용했다. 하지만 이 경우에는 반환된 Object 객체를 다시 원하는 타입으로 타입 변환해야..

JAVA 2022.02.24

[Java] 자바가 컴파일 되는 과정

자바는 OS에 독립적인 특성을 지니고 있다. 이것이 가능한 이유는 JVM(Java Vitual Machine) 덕분이다. 그렇다면 JVM의 어떠한 부분 때문에 OS에 독립적으로 실행을 시킬 수 있는지 자바 컴파일 과정을 통해 알아보고자 한다. 자바 컴파일 순서 개발자가 자바 소스코드(. java)를 작성한다. 자바 컴파일러(Java Compiler)가 자바 소스파일을 컴파일한다. 이때 나오는 파일은 자바 바이트 코드(. class) 파일로 아직 컴퓨터가 읽을 수는 없는 자바 가상 머신이 이해할 수 있는 코드다. 바이트 코드의 각 명령어는 1바이트 크기의 Opcode와 추가 피연산자로 이루어져 있다. (※ Opcode란? → 옵코드는 올리디버거에 어떤 프로그램을 올렸을때, 숫자로만 나타내는 코드. 컴퓨터에..

JAVA 2022.02.23

[Java] 백준 2455번 지능형 기차

https://www.acmicpc.net/problem/2455 2455번: 지능형 기차 최근에 개발된 지능형 기차가 1번역(출발역)부터 4번역(종착역)까지 4개의 정차역이 있는 노선에서 운행되고 있다. 이 기차에는 타거나 내리는 사람 수를 자동으로 인식할 수 있는 장치가 있다. www.acmicpc.net 입출력값에 따라 계산되고 그에 따른 최대값을 구하는 문제. Scanner의 경우 입력값들 사칙연산이랑 최대값 구하는 로직으로 쉽게 구현하지만! 효율성을 위해서 Buffer를 이용해보았다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTok..

Algorithm 2022.02.23

[Java] JVM 구조에 대한 설명. 그리고 버전에 따라 무엇이 바뀌는가?

자바 공부를 할때마다 볼 수 있는 JVM. 오늘은 JVM의 구조와 버전에 따른 변경을 한 번 살펴보고자 한다. 먼저 JVM이란? JVM이란 Java Virtual Machine의 약자로 자바 가상 머신을 뜻한다. 여기서 가상 머신이란 프로그램의 실행을 위한 물리적 머신과 유사한 머신을 소프트웨어로 구현을 한것이다. JVM의 역할은 자바 애플리케이션을 Class Loader를 통해 읽어 Java API와 함께 실행을하고, JVM은 Java와 OS사이에서 중개자 역할을 수행하며 Java가 OS에 구애받지 않고 재사용을 가능하게 해준다. 그리고 가장 중요한 메모리 관리, Garbage Collection을 수행한다. 또한 JVM은 스택기반의 가상 머신이다. 그럼 우리는 왜 JVM를 알아야하는가? 한정된 메모리..

JAVA 2022.02.22

[Java] 백준 2355번 시그마

https://www.acmicpc.net/problem/2355 2355번: 시그마 첫째 줄에 두 정수 A, B가 주어진다. (-2,147,483,648 ≤ A, B ≤ 2,147,483,647) www.acmicpc.net A와 B 사이의 전체적인 합을 구하는 문제 흔히 알고 있는 n(n+1) / 2 1부터 n까지의 합 공식을 살짝만 변형시켜주면 된다. 문제는 1부터 B가 아니라 A부터 B이기 때문에 조건을 설정해서 식을 약간 변형해줘야함. 그결과 (A + B ) * (A - B + 1) /2 라는 공식이 나오게 되었다. import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import j..

Algorithm 2022.02.16

[Java] Wraper Class 래퍼 클래스 란?

래퍼 클래스란?(Wrapper Class)? 자바의 자료형은 크게 기본 타입(primitive type)과 참조 타입(reference type)으로 나누어진다. 대표적으로 기본 타입은 char, int, float, double, boolean 등이 있고 참조 타입은 class, interface 등이 있는데 프로그래밍을 하다 보면 기본 타입의 데이터를 객체로 표현해야 하는 경우가 종종 있다. 이럴 때에 기본 자료타입(primitive type)을 객체로 다루기 위해서 사용하는 클래스들을 래퍼 클래스(wrapper class)라고 한다. 자바는 모든 기본타입(primitive type)은 값을 갖는 객체를 생성할 수 있습니다. 이런 객체를 포장 객체라고도 하는데 그 이유는 기본 타입의 값을 내부에 두고..

JAVA 2022.02.04
728x90