728x90

JAVA 57

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

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

JAVA 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] 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

[Java] Stream & Lambda 람다 스트림

스트림(Stream)과 람다(Lambda)는 Java 8부터 추가된 API다. 교육을 받던 시기 람다에 대해서 잠깐 언급만하고 넘어갔었고, 아직까지 업무하면서 제대로 사용해본적은 없지만, 공부에는 끝이 없는지라 예제를 통해 어떤 녀석들인지 알아보기로 한다. Lambda 먼저 람다부터 살펴보면 class Calculator { Calculator() {}; public int calc(int n) { return n + 1; }; } class Driver { public static void main(String[] args) { int n = 2; Calculator cal = new Calculator(); System.out.println(cal.calc(n));//3 } } Calculator 클..

JAVA 2022.01.28

[Java] HashMap

HashMap 이란? Map 인터페이스를 구현하고 있는 대표적인 자바 클래스. key-value쌍으로 되어있다. Map의 대표적인 특징은 key는 정확히 하나의 value만 가질 수 있다. public class HashMap extends AbstractMap implements Map, Cloneable, Serializable { } HashMap 클래스의 내부는 위와 같은 상속, 구현 관계를 가지고 있다. HashMap은 왜 필요할까? List 형태를 사용하지 않고 HashMap을 사용하는 이유는 바로 성능 때문이다. 만약 List를 사용했다면 검색하는데 있어 시간복잡도는 O(n)으로 나타날것이다. 반면 HashMap은 삽입, 검색 시간에 시간복잡도 O(1)이라는 이점을 가지고 있다. key값의 ..

JAVA 2022.01.26

[Java] StringTokenizer hasMoreTokens() nextToken()

백준 알고리즘을 하다가 Scanner 대신 Buffereader를 많이 사용하는걸 연습했었고, 그 과정에서 많이 보게된 StringTokenizer hasMoreTokens() 그리고 nextToken() 이 친구들이 무엇인지 한 번 살펴보고자 한다. 일단 여기서 자꾸 언급되는 토큰(Token) 이란? ※ 컴파일러는 번역할 경우 먼저 워드해석이라 불리는 기호열로서 입력된 소스 프로그램에서 구문 규칙에 기초하여 이름표, 연산자, 딜리미터 등의 식별을 하고, 내부데이터의 열로 변환. 이 워드해석을 하여 식별되는 단위를 실러블(syllable)이라 하며, 그 내부데이터 표현을 토큰이라함(출처: 네이버 사전) StringTokenizer - 사용자가 지정하는 구분자를 경계로하여 문자열을 나눠주는 Class - ..

JAVA 2022.01.24

[Java] 불필요한 객체 생성를 피하기 이펙티브 자바 new String

똑같은 기능의 객체를 매번 생성하는것보다는 객체 하나를 재사용하는편이 나을때가 많다. 두 코드는 과연 같을까? String str = "RomaMan";개선된 버젼 String str = new String("RomaMan");//하지 말아야할 행위! new String("RomaMan")의 경우는 실행 될때마다 String 인스턴스를 새로 만들게 된다. 생성자에 넘겨진 "RomaMan" 자체가 이 생성자로 만들어내려는 String과 기능적으로 똑같기 때문이다. 만약 이 문장이 반복문이라 빈번히 호출되는 메서드 안에 있다면 쓸데없는 String 인스턴스가 수백만개가 만들어 질 수 있다. 개선된 버젼은 새로운 인스턴스를 매번 만드는 대신 하나의 String 인스턴스를 사용하게 된다. 더불어 이러한 방법을 ..

JAVA 2022.01.21

[JPA] JPA 기본 시작

persistence.xml 통해 필요한 설정 정보를 관리 package jpabook.start; import javax.persistence.*; import java.util.List; /** * @author holyeye */ public class JpaMain { public static void main(String[] args) { //엔티티 매니저 팩토리 생성 EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook"); EntityManager em = emf.createEntityManager(); //엔티티 매니저 생성 EntityTransaction tx = em.getTransaction(); //트랜..

JAVA 2021.12.21
728x90