본문 바로가기
관리자

Programming-[Backend]/Java

(43)
[링크] isAssignableFrom 과 instanceof의 차이 1. 문법 차이 s instanceof String s.getClass().isAssignableFrom(String.class) 2. 확인 시점 차이 instanceof 은 컴파일 시점에 타입 체크 isAssignableFrom은 런타임 시점에 불특정한 클래스에 대한 타입 체크 다시 말해 instanceof 쓰면 쓰는 순간 IDE에서 바로 잡아냄, isAssignableFrom은 프로그램 실행하고 실제 해당 구문이 실행될 때 클래스 타입을 확인함 3. null Safe 차이 null instanceof {어떤 클래스} 는 false 반환 {어떤 클래스}.class.isAssignableFrom(null)은 NullPointerException 반환 참조 https://blog.naver.com/Post..
[TIL][링크][작성중] 자바 어노테이션 및 리플렉션(Java Annotation, Reflection) 리플렉션 기초개념 어떤 클래스의 멤버 변수, 메서드 등을 호출할 수 있다. (예시 추가) class의 변수들은 그야말로 변수다. 아직 어떤 값이 지정될 지 모른다. 클래스의 변수들은 생성자를 통해 인스턴스가 생성되면서 그 값들이 정해지므로 constant 하지 못하다. 어노테이션에서 attribute로 지정하기 위해서는 constant해야만 한다. 따라서 클래스 자체를 어노테이션의 속성값으로 지정할 수는 없다. 리플렉션 사용 시 유의점 인스턴스가 이미 생성되있는 경우라면 굳이 리플렉션을 사용할 필요가 없다. 성능에 좋지 않다. 컴파일 단계에서는 확인 불가하고 런타임에서만 오류를 확인할 수 있다. .setAccessible(true) 메서드를 통해서 접근 지정자(Java Access Modifier)를 무..
[작성중] 서비스 버스, jms 등 개요 jms는 자바에서 제공하는 메시징 서비스이다. 메시징 서비스는 서로 다른 네트워크를 갖는 서비스(애플리케이션)들간에 데이터를 비동기적으로 받을 수 있게 해준다. 다시 말해 서비스 1과 서비스 2 사이에 직접적인 통신이 일어나는 것이 아니라 서비스 1과 서비스 2 사이에 서비스 버스라고 하는 큐(Queue)가 있어서 서비스 1과 서비스 2 사이의 통신을 받아들이고 저장하는 역할을 한다. 서비스 1에서 특정 로직이 끝나고 서비스 버스로 완료된 데이터가 담겨있는 문자열을 보내면 서비스 버스에 해당 데이터가 '메시지(레터)'라는 이름으로 쌓이게 할 수 있다. 그럼 서비스 2가 서비스 버스에 접근해서 이 데이터를 확인하고 서비스 2의 특정 로직을 실행하거나 관련 데이터베이스에 정보를 저장할 수 있게 된다. ..
[자바 기초] [작성중] 5. 자바의 동작원리 : JVM의 ClassLoader https://tecoble.techcourse.co.kr/post/2021-07-15-jvm-classloader/ https://joomn11.tistory.com/14 https://engkimbs.tistory.com/606 https://sas-study.tistory.com/262 https://hbase.tistory.com/174 https://velog.io/@agugu95/%EC%9E%90%EB%B0%94-%ED%81%B4%EB%9E%98%EC%8A%A4-%EB%A1%9C%EB%94%A9%EA%B3%BC-%EC%86%8D%EB%8F%84-%EA%B7%B8%EB%A6%AC%EA%B3%A0-%EA%B8%B0%EB%B2%95%EB%93%A4
[자바 기초] 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를 검색해보면 클래스 파일들을 로딩하는 역할을 한다고 나와있다. 그런데 도대체 로딩이 무엇인지 설명하는 글을 찾기가 어렵다. 컴파일된 파일들을 로드한다는 것이 무슨 의미일까? 클래스 파일을 로드한다는 것은 프로그램에서 클래스 파일을 이용할 수 있도록 특정 메모리 영역에 클래스 파일의 정보를 저장하는 것을 의미..