Programming-[Backend]/Java (39) 썸네일형 리스트형 [자바 기초] 4. 자바의 동작원리 : JVM, JRE, JDK 구분과 차이점 잠시 Gabage Collector(GC)로 길이 샜다. 다시 자바의 동작원리의 큰 부분으로 돌아온다. GC는 좀 구체적인 감이 있지만 언젠가는 공부해야될 주제였다. 재미있었으니 됐다. 자바 동작원리를 이해하기 위한 가장 큰 틀로 자바의 바이트코드 - 기계어 - 하드웨어의 동작 방식 등에 대해서 공부했었다. 이제 바이트코드로 변환된 자바의 클래스 파일이 어떻게 메모리에 저장되서 동작되게 되는지 알아본다. 그중 가장 큰 개념인 JVM, JRE, JDK에 대해서 잠시 알고 간다. 1. JVM(Java Virtual Machine) JVM은 자바 코드를 실행하기 위한 핵심 동작 모듈이다. 2편에서 JVM의 native memory를 살펴보긴 했다만, 글의 목적에 맞게 좀 더 크게 보자. JVM 의 역할은 크게.. 자바 Json 파싱, 값 추출하기 : JSONObject, JSONArray 1. Json 구조 Object 구조 Json 데이터를 파싱해서 가져오기 위한 첫 걸음은 Json의 구조를 이해하는 것이다. Json의 구조는 다음 3가지 방식이 있을 수 있다. JsonObject JsonObject 내부 JsonObject JsonArray { } - Culry bracket 으로 감싸진 것은 JsonObject, [ ] - square bracket으로 감싸진 것은 JsonArray 필드값 규칙 key-value에서 key값은 반드시 쌍따옴표 " " 로 감싸야한다. value 값은 Boolean이나 Integer는 그대로 쓰되, 나머지는 쌍따옴표 " "로 감싸야한다. 2. 예제 및 파싱해보기 예제 데이터 예제는 참조1의 데이터를 복사해왔다. batter의 id값들을 모두 추출해보자... [자바 기초] 3. 자바의 동작원리 : Garbage Collection 1. Garbage Collection(GC) 개념 기본 개념은 쉽다. 어떤 인스턴스가 생성되어 메모리 공간을 차지한 상태에서 해당 인스턴스가 프로그램에서 사용되지 않게 되었다면(null 처리 되었거나 해당 인스턴스를 참조하는 부분이 없다면) 해당 인스턴스가 Garbage가 된다. 이런 불필요한 메모리 낭비를 방지하기 위해서 개발자가 직접 인스턴스를 찾아서 제거하는 것이 아니라, JVM이 불필요한 메모리를 정리해주는 기능이 Garbage Collection 이다. 이전 글에서 자바는 Heap memory 영역에 인스턴스를 저장하고 Young Generation, Old Generation 부분이 나뉘어서 관리된다고 배웠다. 그리고 Young Generation에서 Minor GC, Old Generati.. [자바 기초] 2. 자바의 동작원리 : 클래스 로딩과 JVM 메모리 지난 글에서 우리가 작성한 소스 코드는 javac 컴파일러에 의해서 바이트코드로 변환된다고 했다. 이것이 .class 확장자를 갖는 파일이며 이 파일들이 classLoader에 의해 JVM(Java Virtual Machine)에 로딩된다. 이번 글에서는 클래스가 로딩되는 JVM 메모리의 구성과 과정에 대해서 이해해본다. 1. Loading, Memory의 의미 Load 의 의미 classLoader를 검색해보면 클래스 파일들을 로딩하는 역할을 한다고 나와있다. 그런데 도대체 로딩이 무엇인지 설명하는 글을 찾기가 어렵다. 컴파일된 파일들을 로드한다는 것이 무슨 의미일까? 클래스 파일을 로드한다는 것은 프로그램에서 클래스 파일을 이용할 수 있도록 특정 메모리 영역에 클래스 파일의 정보를 저장하는 것을 의미.. [자바 기초] 1. 자바의 동작원리 : 프로그래밍의 동작 원리 1. 자바 개요 자바는 1996년에 JDK 1.0으로 최초 출시되었다. 원래는 다양한 환경에서 작동하는 프로그래밍 언어를 만들기 위해서 고안되었으며, 가전제품 내 탑재되기 위해 개발되었다고 한다. 자바의 특징 중 가장 중요한 점은 JVM(Java Virtual Machine, 자바 실행환경)에서 동작한다는 점이다. 이 덕분에 자바는 운영체제(OS)에 호환되는 JVM만 있다면 어떤 OS에서도 동작이 가능하다. 2. 자바 코드 실행 과정 자바 코드의 실행 과정은 아래 그림으로 요약된다. 여기서 우선 JAVA Compiler가 작동하는 원리에 대해서 이번 글에서 자세히 알아본다. 3. 컴파일 : Java Source -> Java Byte Code 사용자가 java 환경에서 작성하는 코드의 확장자는 .java.. [TIL][작성중] 자바 일급 객체로 소프트웨어 안정성 높이기, 한계점 https://jojoldu.tistory.com/412 일급 컬렉션 (First Class Collection)의 소개와 써야할 이유 최근 클린코드 & TDD 강의의 리뷰어로 참가하면서 많은 분들이 공통적으로 어려워 하는 개념 한가지를 발견하게 되었습니다. 바로 일급 컬렉션인데요. 왜 객체지향적으로, 리팩토링하기 쉬운 코 jojoldu.tistory.com 일급객체 만들기 : 객체를 클래스로 Wrapping하고 객체에 add나 set을 할 수 없게 막는다. 1. 불변으로 만들 수 있다. Setter, Getter를 만들지 않고, validation하는 코드를 넣어놓으면 외부에서 다른 사람이 파라미터로 받아오는 객체를 마음대로 수정할 수 없다. 2. 하나의 기능을 온전히 표현한다. 각 필드값을 마음대로 .. [TIL][TDD] TDD 4편. 자바 Reflection 의 원리와 활용, Spring의 ReflectionTestUtils.invokeMethod 1. Reflection의 정의와 원리 자바의 Reflection은 어떤 클래스의 구현 내용을 모를 때, 해당 내용들을 조회할 수 있도록 자바에서 제공하는 API라고 한다. 이것은 참조 2에 따르면, 자바는 클래스 파일을 바이트 코드로 컴파일하여 static 영역에 위치하게 되므로 여기서 해당 클래스의 정보를 가져올 수 있는 것이라고 한다. 가져올 수 있는 정보는 아래와 같다. ClassName Class Modifiers Package Info Superclass Implemented interfaces Constructors MethodsFields Annotations 2. Reflection 사용해보기 TestClassForReflection라는 클래스를 임시로 만들고 .class 뒤에 .을 붙이.. [TIL] 자바 리스트 2개 이상 stream으로 순차적으로 비교 처리하기 : LongStream, IntStream for문을 안쓰고 길이가 같은 리스트의 정보들을 순차적으로 처리할려면, stream 문법으로 LongStream 또는 IntStream을 사용하면 된다. for(int i = 0; ...) 을 쓰지 않는 방법이다. 1 2 3 4 5 6 7 8 9 10 int size = AList.size(); List result = IntStream.range(0, size).boxed().map(i -> { ADto aDto = AList.get(i); BDto bDto = BList.get(i); //필요한 로직 처리... //ex) aDto.setName(bDto.getName()); return aDto }).collect(Collectors.toList()); Colored by Color Scripter cs 이전 1 2 3 4 5 다음