객체 종류: DTO와 VO - 객체 목적에 따른 명칭DTO(Data Transfer Object)가변 객체 = 객체 내 데이터를 Getter로 조회 가능, 객체 내 데이터를 Setter로 쓰기 가능순수하게 데이터를 담아 계층간 전달하는 객체로직을 갖고 있지 않은 순수한 데이터 객체이며 메서드로는 getter / setter만 갖는다.Setter의 경우 변조 가능성 有 -> 생성자로 값을 넣어주도록 하면 전달하는 과정에서 변조가 불가능package com.example.spring_practice.dto;import lombok.Getter;import lombok.Setter;@Getter//@Setterpublic class MemberDto { private String name; priv..
분류 전체보기
정적 팩토리 메서드객체를 생성할 수 있는 방법이 오직 단, 하나의 정적 메소드 방식으로 만 가능하도록 설정팩토리 메서드 = 객체를 생성 및 반환하는 정적 메서드정적 메소드의 의의는 기존 객체에서 새로운 객체로의 변환이다.한가지 예를 들어보자면 Enum의 요소를 조회할 때 사용하는 `valueOf`도 정적 팩토리 메서드의 일종이라고 할 수 있다.미리 생성된 객체를 "조회"를 하는 메서드이기 대문에 팩토리 역할을 한다고 볼 수는 없지만, 외부에서 원하는 객체를 반환해주고 있으므로 결과적으로는 정적 팩토리메서드라고 간주해도 좋다.public enum Color { RED, BLUE;}...Color redColor = Color.valueOf("RED");Color blueColor = Color.val..
빌더 패턴은 3가지로 분리되어 호출빌더 정의 -> 필드설정 -> 객체 생성 1. 빌더 정의Member.MemberBuilder builder = Member.builder() 2. 필드 설정builder .name("Aaron") .email("aaron@example.com") 3. 객체 생성Member aaron = builder.build(); 흔히 사용하는 빌드 패턴은 아래와 같이 빌드 정의 + 필드 설정 + 객체 생성이 모두 합쳐진 상태Member aaron = Member.builder(); .email("aaron@example.com") .name("Aaron") .build(); 생성자가 아닌 빌더를 통해 객체를 생성하는 이유내가 ..
생성자필요한 형태의 객체에 따라 생성자 만들어서 사용 가능, 객체는 아래 3가지 방법으로 생성할 수 있다.@NoArgsConstructor + + @SetterCustom Constructor@AllArgsConstructor 1. @NoArgsConstructor + @Setter먼저 빈 객체를 생성한 뒤, 필요에 따라 원하는 필드값을 주입하는 방식빈 생성자(@NoArgsConstructor) + 수정자(@Setter) 통한 필드 주입 2. Custom Constructor1. 필요한 필드값만 주입 받는 생성자부분 생성자(@RequiredArgsconstructor) + 수정자(@Setter) 통한 필드 주입 2. DTO (데이터 전달용 객체)를 통한 생성자DTO(Data Transfer Ob..

객체 지향 프로그래밍(Object-Oriented Programming, OOP)객체지향 프로그래밍은 아래 4가지 핵심 개념을 통해 지원캡슐화상속추상황다형성위 4개 핵심 개념은 아래와 같이 분류 가능Class: 캡슐화 + 상속캡슐화(Encapsulation)상속(Inheritance): ExtendsInterface: 추상황 + 다형성추상화(Abstraction): Interface and Abstract Class다형성(Polymolphism): Class의 다형성 + Interface의 다형성Class: 캡슐화 + 상속클래스 = 데이터 + 행위데이터: 필드(Field) 혹은 속성(Attribute)Primitive Type: 값을 담는 그릇, 값이 필수임, 값을 지정하지 않으면 기본값이 들어간다.in..

JVM 구성아래 3가지만 기억Class Loader(로더): 실행을 위한 Bytecode(.class)를 가져온다.Runtime Data Area(메모리): 바이트 코드를 메모리에 얹고Execution Engine(엔진): 구동한다.(바이트코드 -> 기계어)1. Class Loaderjavac(컴파일러)를 통해 컴파일된 바이트코드는 Class Loader가 아래 Runtime Data Area에 적재컴파일 후 생성되는 바이트코드가 엄청 많은데 이걸 메모리에 한번에 올려서 구동하면 메모리 과부화... 그래서 class Loader가 필요한 클래스만 꺼내서 메모리에 올려준다.동적 로딩(Dynamic Loading): 필요한 바이트코드만을 Runtime Data Area(메모리)에 적재3가지 절차를 수행: L..

컴파일 에러와 런타임 에러 (Checked / Unchecked Exception)java는 에러를 자바 프로그램 입장에서의 에러 발생 근원 (source)에 따라 2가지로 구분해 놓음자바 프로그램 "외부" 에서 발생하는 것: (Need to be) Checked Exception충분히 예상 가능한 에러이기에, 복구가 필요한 예외(예외 처리 강제) + 제어할 수 있다.자바 프로그램 "내부 로직" 에서 발생하는 것: Unchecked Exception어떤 상황에서 발생되는지 예측할 수 없어, 어떻게 복구해야할지 전혀 알 수 없다.그래서 로그를 잘 남겨야한다. 그게 Unchecked Exception 처리의 가장 근본, 원칙에러 처리: Try -> Throw -> Catch자바 언어에서는 Try -> Thr..

spring 프로젝트 생성 (Intellij, Gradle)java 17gradle3.3.0의존성 추가Spring Web: 가장 기본적으로 Spring MVC기반의 REST API 혹은 웹 페이지 반환을 위한 Tomcat서버Lombok: 불필요한 java 코드 작성을 최소화하기 위한 어노테이션 기반 코드 자동 생성기Thymeleaf: Spring에서 웹 페이지를 만들어 클라이언트에게 서빙하려 사용하는 서버사이드 템플릿 엔진 JDK(Java Development Kit) 설치 : 모든 개발 및 실행의 근간인 JDK JDK 버전은 상관없는데, 실습에서 사용하고자 하는 language level 이 17이면 된다.Gradle구동을 위한 자바 JDK 자바 버전을 동일하게 설정Intellij에는 2개의 자바 어플..

우리가 Java코드를 작성하면 그것이 어떻게 우리가 사용하는 웹 서버(혹은 프로그램)가 되는걸까?먼저 프로그램이 동작하는 기본 원리를 집자면, 기계어가 머신에서 (해석되어) 실행되는 것이다.컴파일(complie)과정java코드(.java) -> (자바 컴파일러(javac)를 통해) -> bytecode(.class).java를 컴파일해서 .class로 만들고 .class파일을 jar압축한다. c언어로 보는 컴파일 과정런타임(Runtime) 과정bytecodes(.class) -> (자바엔진(JVM)을 통해) -> 기계어(binary code)Interpreter 인터프리터 = 자바 엔진(JVM)JVM은 JVM을 사용하고 있는 os, cpu에 따라서 바이너리 코드를 만든다. Interllj가 알려주는 컴..