자바 스터디

    객체 지향 ( Object - Oriented )

    1. 객체 ( Object ) 사전적으로 물건 각 객체마다 자기의 임무가 있다. 예) 어느 한 카페 카페로 들어와 주문을 하는 손님 손님의 주문을 받는 직원 커피를 만드는 직원 → 커피를 중심으로 3명이 각자의 역할에 맞춰서 맡은 일을 한다. 손님이 없다면 주문을 받지못할 것이고, 손님이 왔는데 주문을 직원이 못받으면 커피는 만들어지지 못하고 손님은 무한히 기다리게 된다. 이렇게 객체는 상태와 역할을 가진다. 위에서와 같이 커피라는 임무가 들어왔을 때 자신의 역할을 마치고 다음 객체가 할 수 있는 상태를 만들어준다. 객체 지향은 데이터를 추상화시켜서 상태와 임무를 가진 객체를 통해 그 객체들 간의 상호작용을 통해 로직을 구성 2. 캡슐화 ( Encapsulation ) 관련있는 속성과 행위들을 묶은 것 ..

    Generic, Raw Type, Generic Type Eraser

    Generic ? 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시 타입 체크를 해주는 기능 클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 것 //Generic 적용 x - Raw Type ArrayList lists = new ArryList(); //Generic 적용 o ArrayList lists = new ArrayList(); 장점 잘못된 타입이 들어올 수 있는 것을 컴파일 단계에서 방지할 수 있다. 클래스 외부에서 타입을 지정해주기 때문에 따로 타입을 체크하고 변환해줄 필요가 없다. 비슷한 기능을 지원하는 경우 코드의 재사용성이 높아진다. 타입 종류 → Type → Element → Key → Value → Number public interface Ma..

    리플렉션(Reflection) ?

    Reflection ? 구체적인 클래스 타입을 알지 못해 그 클래스의 메소드와 타입 그리고 변수들을 접근할 수 있도록 해주는 자바 API 즉, 구체적인 클래스 타입을 모를때 사용하는 방법 Spring framework, Hibernate ORM, jackson Library 등에서 사용 장점 확장성 특징 애플리케이션은 정규화된 이름을 사용하여 확장성 객체의 인스턴스를 생성하여 외부 사용자 정의 클래스를 사용할 수 있다. 클래스 브라우저 및 시각적 개발 환경 제공 클래스 브라우저는 클래스으 Method, Property, Consturctor를 열거할 수 있어야 한다. 시각저인 개발 환경은 개발자가 올바른 코드를 작성하는데 도움이 되도록 Reflection에서 사용할 수 있는 형식 정보를 사용하면 도움이 ..

    GC ( Garbage Collection ) ?

    GC ( Garbage Collection ) ?

    2021.11.10 Java Study // Stop-the-world GC을 실행하기 위해 JVM이 애플리케이션 실행을 정지 stop-the-world가 발생하면 GC를 실행하는 쓰레드를 제외한 나머지 쓰레드는 모두 작업을 멈추고 GC 작업을 완료한 이후에야 중단했던 작업을 다시 시작 GC(Garbage Collection) ? 메모리 관리 기법 중 하나 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요 없게 된 영역을 해제 Young, Old 영역 1. Young 영역 ( Young Generation ) 새롭게 생성된 객체의 대부분이 위치 대부분의 객체가 금방 접근 가능 상태가 되기 때문에 많은 객체가 Young 영역에서 생성되었다 사라짐 Minor GC가 발생 2. Old 영역 ( Old Ge..

    자바의 컴파일 과정과 JVM에서 HEAP의 변화

    자바의 컴파일 과정과 JVM에서 HEAP의 변화

    자바의 컴파일 과정 개발자가 .java 자바 소스코드를 생성한다. 자바 컴파일러에 의해 .java가 컴파일되어 .class 파일로 아직 컴퓨터가 읽을 수 없는 상태인 Java bytecode로 만든다. 컴파일된 변환 코드를 JVM의 Class Loder로 전달한다. Class Loader는 동적로딩을 통해 필요한 클래스들을 로딩 및 링크하여 Runtime Data Area에 올린다. 클래스 로더의 세부 동작 로드 : 클래스 파일을 가져와서 JVM의 메모리에 로드한다. 검증 : 자바 언어 명세 및 JVM 명세에 명시된 대로 구성되어 있는지 검사한다. 준비 : 클래스가 필요로 하는 메모리에 할당한다. 분석 : 클래스의 상수 풀 내 모든 심볼릭 레퍼런스를 다이렉트 레퍼런스로 변경한다. 초기화 : 클래스 변수들..

    JVM( Java Virtual Machine ) 이란

    JVM( Java Virtual Machine ) 이란

    이전의 문제 C / C++ 는 컴파일 플랫폼과 타겟 플랫폼이 다를 경우, 프로그램이 동작하지 않는다. Linux → Linux 는 이상이 없지만 Linux에서 컴파일한 파일은 Windows에서 동작하지 않는다. 해결책으로 크로스 컴파일(Cross Compile)로 타겟 플랫폼에 맞춰 컬파일한다. JVM (Java Virtual Machine)? 기술적 정의 → 코드를 실행하고 해당 코드에 대해 런타임 환경을 제공하는 소프트웨어 프로그램에 대한 사양 일반적 정의 → 자바 프로그램을 실행하는 방법이다. JVM 의 설정을 구성한 다음 설정사항에 따라 실행 중에 프로그램 리소스를 관리 자바 코드를 컴파일해서 얻은 바이트 코드를 해당 운영체제가 이해할 수 있는 기계어로 바꿔 실행시켜주는 역할 자바는 네트워크에 연..

    [Java] JVM과 자바의 버전별 변화

    [Java] JVM과 자바의 버전별 변화

    JVM 자바 코드를 컴파일해서 얻은 바이트 코드를 해당 운영체제가 이해할 수 있는 기계어로 바꿔 실행시켜주는 역할 크게 Class Loader, Execution Engine, Garbage Collector, Runtime Data Area 로 나뉜다. 1. Class Loader .java파일을 컴파일하면 .class파일이 생성되는데 이렇게 생성된 .class파일을 엮어서 JVM이 운영체제로부터 할당받은 메모리영역인 Runtime Data Area로 적재하는 역할 자바 애플리케이션이 실행중일 때 수행된다. 2. Execution Engine Class Loader에 의해 메모리에 적재된 클래스(바이트 코드)들을 기계어로 변경해 명령어 단위로 실행하는 역할 하나하나 실행하는 인터프리터(Interpret..

    자바의 발전과정

    자바의 발전과정

    2021.10.20 Java Study 자바의 발전과정 분류 Java SE 표준 에디션, Java의 핵심 API와 기능들을 제공 Java EE 서버 페이지에 특화된 에디션 JSP와 서블릿을 비롯한 웹 어플리케이션 서버에 관련된 기술 Java ME PDA나 셋톱박스, 센서 등의 임베디드 시스템 환경에 특화 JavaFX 데스크톱 애플리케이션 개발 및 배포를 위한 에디션 크로스플랫폼과 이식과 GUI 라이브러리 제공 JDK와 JRE JRE ( Java Runtime Environment) ? Java 어플리케이션을 실행하기 위한 Java Virtual Machine을 구현하는 환경 JDK ( Java Development Kit ) Java 기반의 애플리케이션을 개발하는데 필요한 번들 Java 애플리케이션과 애..