JAVA
[JAVA] 람다 표현식(Lambda Expression)
람다 표현식 (Lambda Expression) 람다 표현식(lambda expression)이란 함수형 프로그래밍을 구성하기 위한 자바 8부터 지원되는 함수식이며, 간단히 말해 자바의 메소드를 간결하게 함수 식으로 표현한 것이다. 지금까지 자바에서는 메서드를 하나 표현하려면 클래스를 정의해야 했다. 하지만 람다식으로 표현하면 메서드의 이름과 반환값을 생략할 수 있고 이를 변수에 넣어 자바 코드가 매우 간결해지는 장점이 있다. 아래 그림에서 int add(int a, int b) {} 메소드 표현식을, 메서드 타입, 메서드 이름, 매개변수 타입, 중괄호, return 문을 생략하고, 화살표 기호를 넣음으로써 코드를 혁명적으로 함축했음을 볼 수 있다. 이러한 특징으로 람다식을 이름이 없는 함수 익명 함수(..
[JVM] 자바와 T 메모리 구조 2편
[JVM] 자바와 T 메모리 구조 1편에서는 main(), 변수, block, static 변수, 멀티 프로세스, 멀티 쓰레드, 스프링에서의 T 메모리에 대해 살펴보았다. 본 포스팅에서는 추상화, 상속, 다형성 코드에 대해서 T 메모리에 어떻게 저장되는지 살펴보자. 추상화와 T 메모리 [Mouse.java] public class Mouse { public String name; public void sing() { } } [MouseDriver.java] public class MouseDriver { public static void main(String [] args){ Mouse mickey = new Mouse(); mickey.name = "미키"; mickey = null; } } Mouse..
[JVM] 자바와 T 메모리 구조 1편
자바의 T메모리 구조 자바의 RunTime Data Area영역은 스태틱, 스택, 힙 3가지 영역으로 분리하여 간략하게 T 메모리 구조라고 지칭한다. 사실은 조금 더 복잡하지만 변수의 저장 방식에 대해서 설명하기 위해 간략하게 표현한 것이다. 스태틱(Static) 영역 (클래스의 놀이터) Method Area, Class Area, Code Area라고도 불리며 JVM이 동작해서 클래스가 로딩될 때 생성된다. 스태틱 영역에는 클래스 멤버 변수의 이름, 데이터 타입, 접근 제어자 정보와 같은 각종 필드 정보들과 메서드 정보, 데이터 Type 정보, Constant Pool, static변수, final class 등 클래스와 인터페이스의 구조가 저장되는 공간이다. 해당 메소드와 변수를 선언된 범위 내에서는..
[JAVA] Reflection 개념 및 사용 방법
자바의 Class 클래스 (Java.lang.Class) 자바 프로그래밍을 할때 우리는 보통 변수나 클래스를 직접 선언하고 만들어 사용하여 왔다. 그런데 어떤 경우에는 애플리케이션 실행 중에 클래스를 동적으로 불러와 다루어야 할 경우가 생긴다. 즉, 코드를 실행하기전인 컴파일 단계에서 개발자가 직접 폴더를 뒤져가며 클래스 정의문을 찾아 클래스 정보를 얻는 것이 아닌, 코드 상에서 호출 로직을 통해 클래스 정보를 얻어와 다룸으로써 런타임 단에서 다이나믹하게 클래스를 핸들링 하는 것이다. 이때 사용되는 것이 바로 Class 클래스 객체이다. Class 클래스는 java.lang.Class 패키지에 별도로 존재하는 독립형 클래스로서, 자신이 속한 클래스의 모든 멤버 정보를 담고 있기 때문에 런타임 환경에서 동..
[JAVA] Enum 열거형 타입 문법 & 응용
Enum 열거 타입 먼저 Enum은 "Enumeration"의 약자다. Enumeration은 "열거, 목록, 일람표" 라는 뜻을 가지고 있으며, 보통 한글로는 열거형이라고 부른다. 즉, 열거형(enum)은 요소, 멤버라 불리는 명명된 값의 집합을 이루는 자료형이다. 어렵게 생각할 필요 없이 상수 데이터들의 집합 으로 생각하면 된다. 먼저 Enum은 "Enumeration"의 약자다. Enumeration은 프로그래밍을 하다보면 배열이나 리스트 ..등 여러개의 묶음 데이터를 다루는 일이 빈번하다. 이 묶음 데이터 중에는 데이터 주제에 따라 몇가지로 한정된 값만을 가지는 경우가 존재한다. 대표적으로는 '요일' 이나 '계절' 또는 '주사위' 같은 예제를 들 수 있다. 요일은 월,화,수,목,금,토,일 이렇게 ..
[JAVA] 예외를 처리하는 3가지 기법
Exception Handling 3가지 기법 자바의 예외를 try - catch 블럭으로 잡았다고 해서 끝이 아니다. 예외가 발생하였으면 코드를 수정하여 문제점을 고쳐야 되는 것은 맞지만, 예상할 수 없는 예외인 경우 회피를 하거나 복구 동작을 하는 등 예외를 핸들링하여 처리하는 로직이 필요하다. 예상치 못한 예외가 발생하면 이를 단순히 catch문으로 잡아 에러 메세지를 출력하는 것을 떠나서, 실무에서 어떻게 예외를 효과적으로 처리하는지 방법에 대해 알아보도록 하자. 예외를 처리하는 방법에는 예외 복구, 예외 처리 회피, 예외 전환 방법이 있다. 1. 예외 복구 예외 상황을 파악하고 문제를 해결해서 정상 상태로 돌려놓는 방법 Exception이 발생하여도 어플리케이션은 정상적으로 동작 반복문을 이용하..
[JAVA] 예외 처리 - Try With Resource 문법
자바 Resource의 예외 처리 보통 resource란 외부의 데이터(DB, Network, File)를 말한다. 이런 resource들은 자바 내부에 위치한 요소들이 아니기 때문에, 이러한 프로세스 외부에 있는 데이터를 자바 코드에서 접근하려고 할 때 문제(예외)가 발생할 수 있는 여지가 존재한다. 특히 입출력에 관련된 resource들에 접근해서 사용하고 나면 닫는 것이 굉장히 중요하다. 예를들어 파일에 접근해 파일을 열고 내용을 쓰고 난후 꼭 닫아 주어야 한다. 왜냐하면 어떤 resource를 사용하다가 다른곳에서 같은 resource에 접근해 사용하다 보면 꼬일 수 있기 때문이다. 예를 들어 다음과 같이 외부 텍스트 파일에 접근해서 내용을 쓰고 닫는 로직을 자바에서 구현하였다. 만일 data.t..
[JAVA] 예외 던지기(throw) & 예외 연결(Chained Exception)
예외 던지기 예외 발생시키기 (throw) 만일 프로그램적으로 에러가 아니라도 로직상 개발자가 일부러 에러를 내서 로그에 기록하고 싶은 상황이 올 수 있다. 자바에서는 throw 키워드를 사용하여 강제로 예외를 발생시킬 수 있다. 원래는 프로그램이 알아서 에러를 탐지하고 처리 하였지만, 이번에는 사용자가 일부러 에러를 throw하여 에러를 catch 한다는 개념으로 보면 된다. 이때 new 생성자로 예외 클래스를 초기화하여 던지는데, 이 클래스 생성자에 입력값을 주게되면, catch문의 getMessage() 메서드에서 출력할 메세지를 지정하게 된다. import java.util.Scanner; public class Main { public static void main(String[] args) {..
[JAVA] 예외 처리(try catch) 문법 & 응용
예외(Exception) 처리하기 예외 처리(exception handling) 이란, 프로그램 실행 시 발생할 수 있는 예상치 못한 예외 발생에 대비한 코드를 작성하는것이다. 자바의 코드를 예외 처리를 한다고 해서 프로그램의 예외 상황 자체를 막을 수는 없다. 예외 처리의 목적은 예외의 발생으로 인한 실행 중인 프로그램의 갑작스런 비정상적인 동작을 막고, 에러를 잡아 복구를 시도하거나 아니면 회피 하는식으로 처리하여, 프로그램이 정상적인 실행상태를 유지할 수 있도록 하는 것이다. try - catch 문 다음은 예외처리를 위한 try, catch문의 기본 구조이다. try 블록에는 예외발생 가능 코드가 위치하고 만일 코드에 오류가 발생되면, 오류 종류(예외 클래스)에 맞는 catch 문으로 가서 cat..
[JAVA] (Un)Checked Exception과 트랜잭션의 오해와 진실
잘못 알려진 (Un)Checked Exception 트랜잭션 Checked Exception 과 Unchecked Exception 차이를 알아볼때 다음과 같이 정리된 포스팅을 많이 봤을 것이다. 만일 코드에서 예외가 발생했는데 Checked Exception 이면 롤백을 하지않고 그대로 진행되고, 만일 Unchecked Exception 이면 롤백을 한다는 것이다. 그러나 이는 반은 맞고 반은 틀린 정의이다. 백기선님의 강의에서도 이 부분에 대해서 따끔하게 혼내주시기도 한다. 지금부터 그 이유를 알아보자. 자바의 트랜잭션 다루기 트랜잭은 데이터베이스에서도 쓰이는 개념으로서, 하나의 작업 단위를 뜻한다. 예를들어 쇼핑몰의 "상품발송"이라는 트랜잭션을 가정해 보자. "상품발송" 이라는 트랜잭션에는 "포장"..