Java 52

Exception, 예외 처리

체크 예외(Checked Exception)와 언체크 예외(Unchecked Exception) 체크 예외(Checked Exception) 체크 예외란 위의 그림에서와 같이 RuntimeException 클래스를 상속받지 않는 예외 클래스들이다. 예를 들면 ClassNotFoundException등이 있으며 catch 혹은 throws 키워드를 사용하여 반드시 해당 예외를 처리해주어야한다. 언체크 예외(Unchecked Exception) 언체크 예외는 RuntimeException 클래스를 상속받는 예외들이다. 체크 예외와 달리 해당 예외를 반드시 처리해 주지 않아도 되며 NullPointerException, ArrayIndexOutOfBoundsException등이 있다. 또한 RuntimeExc..

Entity와 Mapper

Entity Entity는 실제 데이터베이터베이스의 데이터구조와 1:1로 매핑되는 객체이다. 그렇기에 DB의 테이블내에 존재하는 컬럼만을 위한 필드를 가저야한다. Entity 클래스는 상속을 받고나 구현되여서는 안되며 테이블내에 존재하지 않는 컬럼을 가져서도 안된다. Entity와 DTO를 구분한 이유 Entity와 DTO를 살펴보면 사용하는 애너테이션만 조금 다를뿐 구성되는 필드는 거희 비슷하다. 하지만 굳이 이 둘을 분리시킨 가장 큰 이유는 두 객체간의 주 목적이 다르기 때문이다. DTO : 클라이언트의 요청 데이터를 하나의 객체로 받기 위해 혹은 응답으로 주기위해 사용하며 API계층에서 사용 Entity : 비즈니스 로직과 데이터베이스의 작업을 수행하기위해 사용되며 비즈니스계층과 데이터 엑세스계층에..

DTO (Data Transfer Object) 과 Validation

DTO (Data Transfer Object) DTO는 Data Transfer Object의 약자로 마틴 파울러(Martin Fowler)가 ‘Patterns of Enterprise Application Architecture’ 라는 책에서 처음 소개한 엔터프라이즈 애플리케이션 아키텍처 패턴의 하나이다. 이름에서 알수있듯이 데이터의 전송을 위한 '객체'이다. 클라이언트에서 요청을 통해 서버로 JSON 포멧의 데이터를 보내면 DispatcherSerblet의 HandlerAdapter가 받은 JSON 데이터를 지정된 DTO객체로 만들어주게된다. 또한 응답시에도 DTO(객체)를 응답해주게되면 HandlerAdapter는 JSON 포멧으로 데이터를 변환시킨 뒤 클라이언트로 응답을 보내게된다. 이렇게 DT..

Servlet과 JSP 그리고 MVC(Model, View, Controller)

Servlet 서블릿은 클라이언트의 요청을 처리하고 해당 요청의 결과를 클라이언트에게 전송하는 자바 프로그래밍 기술이다. 즉, 웹 어플리케이션을 동적으로 만들어주는 역할을 담당하고 있다. 웹 어플리케이션은 요청과 응답으로 클라이언트와 백엔드 서버간에 소통을 하며 동적서비스를 만드는데 이때 Servlet container가 클라이언트의 요청을 받아 요청에 맞는 로직을 수행할 Servlet 객체를 생성하고 관리한다. (Spring에는 Tomcat이 내장되어있으며 이 Tomcat이 Servlet container 역할을 한다.) Servlet 필수 메서드 init() - 서블릿 생성 service() - 처리 진행 destroy() - 서블릿 삭제 Servlet container의 역할 요청과 응답을 이용하여..

관점 지향 프로그래밍 (Aspect Oriented Programming, AOP)

AOP AOP는 애플리케이션의 구조적 향상을 위해 기존에 자바에서 사용하던 OOP방식을 좀더 보안하여 나온 개념이다. OOP에서는 class를 중점으로 모듈화*를 하였지만 AOP는 관점이라는 추상적인 개념을 중점으로 모듈화를 진행한다. 쉽게 설명하자면 OOP의 class들에서 어떠한 특정한 목적을 위해 공통으로 구현하는 프로세스(공통 관심)들을 또다시 분리하여 코드의 반복을 줄이고 유지보수에 더 용이하게함으로써 더욱 객체지향적 프로그래밍이 되도록 하는 기술이다. (개인적으로 노드JS의 미들웨어정도로 생각하니 이해하기 좀더 수월했다.) (*모듈화: 어떤 시스템의 구성요소가 분리되고 재결합 할 수 있게 만드는 행위) 이러한 AOP의 주 컨샙으로는 8가지가 존재한다. Aspect Join point Advic..

스프링 컨테이너

Spring container 스프링 컨테이너는 내부에 존재하는 애플리케이션 Bean(객체)의 생명주기 즉, 생성, 관리, 제거 등의 역할을 담당한다. 스프링 컨테이너는 XML, 애너테이션 기반의 자바 설정 클래스로 만들 수 있다. 과거에는 개발자가 XML을 통해 모두 설정해줬지만 Spring Boot를 사용하면서 XML설정 없이 사용이 가능해 졌다고 한다. 스프링 컨테이너를 사용하는 이유 스프링 컨테이너를 사용하게 되면서 객체들간의 의존관계를 정리하고 의존성을 낮추며 해당 객체들을 스프링에서 관리하여 개발자들은 비즈니스 로직에만 집중하기 더 쉬워 졌다. 스프링 컨테이너를 사용하기 이전에는 객체를 사용하기 위해 new 생성자를 사용하고 무수히 많은 객체들이 서로 참조하게 되어 의존성이 높아 객체지향프로그..

POJO

위의 그림은 Spring 삼각형 이라는 것으로 POJO라는 것은 Spring에서 사용하는 핵심 개념들인 IoC/DI, AOP, PSA를 통해 달성할 수 있다. POJO를 직역하면 순수한 자바 객체가 되는데 POJO프로그래밍이란 다른 기술이나 규약 혹은 특정 환경에 종속적이지 않고 순수 자바 객체만을 사용하는 프로그래밍이다. 즉, 특정한 다른 기술들을 변경하더라도 비지니스 로직에 영향을 주지 않도록 서로의 역할을 독립적으로 코드를 작성하는 프로그래밍이다. 예를 들면 MariaDB에서 MySQL로 데이터베이스가 바뀌더라도 비지니스 로직을 수정할 일이 없어야한다. 이와 같이 최대한 다른 환경이나 기술에 종속적이지 않도록 하기 위한 POJO 프로그래밍 코드를 작성하기 위해 Spring에서 지원하고 있는 3가지 ..

스레드의 동기화

프로세스는 자원, 데이터, 그리고 스레드로 구성된다. 프로세스는 스레드가 운영 체제로부터 자원을 할당 받아 소스 코드를 실행하여 데이터를 처리하는데 이 때, 싱글 스레드 프로세스는 데이터에 단 하나의 스레드만 접근하므로, 문제될 사항이 없지만 멀티 스레드 프로세스의 경우, 두 스레드가 동일한 데이터를 공유하게 되어 문제가 발생할 수 있다. 아래의 코드는 하나의 객체 enemy의 두명의 플레이어(두개의 스레드)가 공격하여 쓰러트리게 되는 코드이다. public class Main { public static void main(String[] args) { // 하나의 Enemy 객체를 공유하는 두개의 스레드 생성 Runnable enemyGetAttacked = new ThreadTask3(); Threa..

Java/Java 2023.03.12

스레드 (Thread)

프로세스(Process)와 스레드(Thread) 프로세스는 실행 중인 애플리케이션을 의미한다. 즉, 애플리케이션을 실행하면 운영체제로부터 실행에 필요한 만큼의 메모리를 할당 받아 프로세스가 됩니다. 프로세스는 데이터, 컴퓨터 자원, 그리고 스레드로 구성되는데, 스레드는 데이터와 애플리케이션이 확보한 자원을 활용하여 소스 코드를 실행한다. 즉, 스레드는 하나의 코드 실행 흐름이라고 볼 수 있다. 메인 스레드(Main thread) 자바 애플리케이션을 실행하면 가장 먼저 실행되는 메서드는 main 메서드이며, 메인 스레드가 main 메서드를 실행시켜준다. 메인 스레드는 main 메서드의 코드를 처음부터 끝까지 순차적으로 실행시키며, 코드의 끝을 만나거나 return문을 만나면 실행을 종료한다. 만약, 어떤 ..

Java/Java 2023.03.12

자바 가상 머신(Java Virtual Machine)

자바가 탄생하기 이전에 객체지향 프로그램으로 자주 사용되었던 C++에는 큰 문제가 하나 있었다. 바로 운영체제로부터 독립적이지 못하다는 점이다. 쉽게 말해, Windows를 위해 만든 프로그램은 Windows에서만 작동이 가능했고, Mac OS에서 그 프로그램을 실행시키려면 Mac OS에 맞게 새로 프로그램을 만들고 컴파일해야 했다. 즉, 프로그래밍 언어가 운영체제에 종속적이기 때문에, 어떤 프로그램을 만들 때 각 운영체제 별로 따로 만들어주어야 했었다. 자바는 이러한 문제점을 해결하고자 탄생한 언어이다. 자바는 C++처럼 객체지향 프로그래밍이 가능하면서도, 운영체제로부터 독립되어있기 때문에, 자바로 소스 코드를 한 번만 작성하면 어떤 운영체제에서도 코드를 수정할 필요 없이 프로그램을 실행시킬 수 있다...

Java/Java 2023.03.11