Old Posts226 [Java] 자바 클래스로더(Class Loader) 자바언어로 작성된 클래스 파일은 JVM 위에서 동작한다. 직접 운영체제 위에서 동작하지 않기 때문에 높은 이식성을 가질 수 있게되었다. 자바의 클래스로더(ClassLoader)는 컴파일된 클래스 파일을 JVM위로 올리는(Load) 동작을 수행한다. 자바 클래스로더(Java ClassLoader) 자바는 클래스 파일을 동적으로 읽어온다. JVM이 동작하다가 클래스 파일을 참조하는 순간 동적으로 읽어서 메모리에 로드되면서 JVM에 링크 된다. 자바 클래스로더(Java ClassLoader)는 클래스들을 동적으로 메모리에 로딩하는 역할을 담당한다. 클래스 로더 로딩과정 컴파일된 .class 파일은 '로딩(Loading)', '링킹(Linking)', '초기화(Initializing)' 단계를 거쳐 JVM에서 .. 2021. 7. 13. [Java] 자바 스트림(Stream) 사용법 및 예제 자바 스트림(Stream) 자바의 스트림(Stream)은 'Java 8'부터 지원되기 시작한 기능이다. 컬렉션에 저장되어 있는 엘리먼트들을 하나씩 순회하면서 처리할 수 있는 코드패턴이다. 람다식과 함께 사용되어 컬렉션에 들어있는 데이터에 대한 처리를 매우 간결한 표현으로 작성할 수 있다. 또 한, 내부 반복자를 사용하기 때문에 병렬처리가 쉽다는 점이 있다. 'Java 6' 이전까지는 컬렉션의 엘리먼트들을 순회하기 위해서 Iterator 객체를 이용했다. ArrayList list = new ArrayList(Arrays.asList("a", "b", "c")); Iterator iterator = list.iterator(); while(iterator.hasNext()) { String value = .. 2021. 7. 11. [Java] 제네릭(Generic) 사용법 및 예제 자바 제네릭 자바에서 제네릭은 데이터의 타입을 일반화하는 것을 의미한다. 클래스나 메소드에서 사용할 데이터의 타입을 컴파일 시에 미리 지정하는 방법이다. 제네릭(Generic)이라는 단어의 의미에도 '일반적인'이라는 뜻이 있다. 우리가 자바로 프로그래밍을 할 때 많이 사용하는 컬렉션 타입들이 제네릭을 구현되어 있다. 예를들어 ArrayList stringList = new ArrayList(); ArrayList integerList = new ArrayList(); ArrayList 객체의 경우 객체에서 다룰 데이터의 타입을 제네릭으로 입력하도록 되어 있다. ArrayList처럼 다양한 타입에 대해 동작하는 클래스를 구현하고 싶을 때 제네릭을 사용한다. 제네릭은 데이터의 타입을 클래스 내부에서 지정하는.. 2021. 7. 10. [Java] jstack 사용법 - 스레드 덤프 생성 멀티 스레드 자바 애플리케이션의 경우, 수 십개의 스레드가 공유 자원에 접근을 하면서 락(lock)을 잡았다 놓았다 한다. 이 과정에서 데드락(Dead lock)이 발생하면서 시스템이 실행을 멈추는 경우가 발생할 수 있다. 혹은 속도가 느린 외부 서버에 대한 연결 요청에 대해 기다리면서 응답시간이 늦어지는 경우도 있다. 애플리케이션의 실행이 어디에서 지체되고 있는지, 어느 부분에서 막혀있는지 확인하기 위해서는 스레드 덤프를 분석해야한다. 스레드 덤프를 생성하는 방법에는 여러가지가 있지만 이번 포스트에서는 jstack을 이용해보겠다. 설치 jstack은 JDK 패키지에 기본 포함되어 있다. 따라서 ${JAVA_HOME} 경로의 bin 디렉토리만 ${PATH}로 잡아주면 실행할 수 있다. (JAVA 5 이상.. 2021. 7. 8. [Linux] jq 명령어 사용법 및 예제 - Bash 스크립트에서 json 파싱 Bash 스크립트에서 REST API 호출을 하는 경우 데이터가 JSON 포맷으로 얻어지는 경우가 많다. 문제는 XML이나 JSON 문서에서 데이터를 얻어오기 위해서는 파싱을 해야한다는 점이다. grep 명령이나 awk 스크립트를 이용해서 처리할 수도 있지만 jq 명령을 이용하면 쉽게 JSON 문서를 다룰 수 있다. jq 설치 $ sudo yum install jq -y $ jq --version jq-1.5 jq는 yum, apt-get, brew 등의 패키지 관리자로 쉽게 설치할 수 있다. yum install epel-release -y yum install에서 jq를 찾을 수 없다고 하는 경우라면 epel-release 를 설치해주면 된다. jq 사용법 jq 명령은 입력으로 받은 JSON 문서에 .. 2021. 7. 7. [Java] 자바빈(Java Bean)이란 무엇인가 자바빈즈(Java Beans)는 자바 언어로 작성된 소프트웨어 컴포넌트를 일컫는 말로 데이터 표현을 목적으로 하는 자바 클래스를 의미한다. 자바 빈즈 클래스는 '자바 빈즈 컨벤션(Java Beans Convention)'을 지켜야 한다. 자바 빈즈 컨벤션(Java Beans Convention) 클래스는 인자(Argument)가 없는 기본 생성자(Default constructor)를 갖는다 클래스의 멤버 변수는 프로퍼티(Properties)라고 하며 private 접근 제한자를 가져야 한다. 클래스의 프로퍼티들은 Getter/Setter를 통해 접근할 수 있어야 한다 Getter의 이름은 get{프로퍼티 이름} 이며, Setter의 이름은 set{프로퍼티 이름}이다 Getter/setter의 접근 제한.. 2021. 7. 4. [Java] 예외처리 코드 잘 작성하는 9가지 방법 자바 프로그래밍에서 '예외처리(Exception Handling)'는 다소 까다로운 주제다. 개발 조직들은 자신들만의 예외처리 규칙을 만들고 사용하는 경우가 많다. 일반적으로 자바 프로젝트에서 따르면 좋은 예외처리를 정리해보자. 자바 예외(Exception) 자바 프로그램이 실행과정에서 만날 수 있는 의도하지 않은 상황에 대한 처리를 위해 '예외(Exception)'를 제공한다. 예를 들어 존재하지 않는 파일을 열어보려고 한다던가, 권한이 없는 파일에 데이터를 쓰려고 할 때 예외가 발생한다. 이런 예외상황에서 프로그램의 실행을 종료하지 않고, 예외 상황을 벗어나기 위해서 '예외처리(Exception Handling)'를 하게 된다. 예외처리를 통해 예외 상황에서 벗어나도록 코드를 작성하던가 시스템을 망가.. 2021. 7. 2. [Java] 깔끔한 조건문(if) 작성법 - Bubble Style vs Gateway Style 자바 프로그래밍을 하다보면 코드가 더러워지는 경우들이 있다. 특히 조건문들이 붙으면서 코드가 지저분해지고 가독성이 떨어지게 되는 경우가 많다. 조건문을 조금만 다른 관점으로 접근하면 가독성이 훼손되지 않으면서 동일한 로직을 좀 더 깔금하게 구현할 수 있다. Bubble Style 우선 코드의 로직을 보강하면서 조건문을 붙여나갈 때 제일 많이 등장하는 패턴의 코드는 다음과 같을 것이다. if (condition1) { if (condition2) { if (condition3) { return "All condition is true"; } return "Condition3 is false"; } return "Condition2 is false"; } return "Condition1 is false";.. 2021. 7. 1. [Java] 자바 난수(랜덤숫자) 생성하기 자바 프로그램에서 랜덤 숫자를 생성하기 위해서 Random 클래스를 사용하거나 Math 클래스를 사용할 수 있다. Random 클래스를 사용할 경우 boolean, int, long, float, double 타입의 랜덤 값을 얻을 수 있으며, Math 클래스를 사용할 경우 0.0에서 1.0 사이의 double 타입 난수를 얻을 수 있다. Math.random() Math 클래스에는 랜덤 숫자를 얻어올 수 있는 random() 메소드가 정의되어 있다. System.out.println("0.0 ~ 1.0 Random Value : " + Math.random()); Math 클래스는 Object 클래스에 정의되어 있으므로 따로 import 할 필요는 없다. Math.random() 메소드는 시드값으로 현.. 2021. 6. 30. 이전 1 ··· 13 14 15 16 17 18 19 ··· 26 다음