빌드 소스코드를 실행가능한 독립적인 소프트웨어 산출물로 만드는 과정으로 코드를 서버에 올릴 수 있는 상태로 만드는 것 빌드과정 컴파일 : 소스코드(.java)를 바이너리 코드(.class)로 변환 링크 : 클래스 파일들끼리 연결(외부 라이브러리 포함) 패키징 : 연결된 클래스 및 리소스 파일 연결 테스트 : 기능 테스트 빌드 결과 JAR(Java Archive) : 자바애플리케이션 압축 양식, 클래스와 리소스로 구성 WAR(Web Archive) : 웹 애플리케이션 압축 양식 원래 웹 기능이 들어간 자바 애플리케이션은 WAR로 빌드해야하지만 스프링부트는 내장 톰캣을 통해 JAR로 빌드할 수 있게한다. 빌드툴 소스코드의 빌드 과정을 자동으로 처리해주며 외부 라이브러리 의존성 추가 및 관리를 해주는 프로그램..
현실세계에서 발생하는 사건 중 SW 서비스를 통해 해결할 문제의 영역을 도메인, 비즈니스라고 한다. 따라서 비즈니스 로직은 현실세계의 문제를 해결하는 로직이 담긴 코드를 의미한다. 비즈니스 로직을 제외한 모든 코드는 비즈니스 로직을 SW에 적용하기 위한 애플리케이션 서비스 로직이라 한다. 웹 프로그래밍의 기초인 커뮤니티, 게시판 도메인을 예로 든다면 비즈니스 로직 글의 CRUD, 회원가입, 로그인 애플리케이션 서비스 로직 클라이언트와 웹 통신을 위한 컨트롤러, 도메인 비즈니스 로직의 호출을 위한 서비스, 서버와 DB를 연결해주는 레포지토리 관점의 분리 둘을 구분하는 이유는 스프링의 삼대 요소 중 하나인 관점의 분리를 위해서이다. 비즈니스 로직과 애플리케이션 서비스 로직을 나눠 응집도를 높히고 결합도를 낮..
1. 문법적 차이 추상화는 변수와 다양한 접근제한자 사용이 가능하다. 둘 다 인스턴스는 생성할 수 없다. 문법적으로는 바뀌어야 하는 값을 가지거나, 접근제한자를 통해 보안성을 높이고 싶을 때 추상화클래스를 사용할 수 있다. 2. 개념적 차이 관련 포스팅 클래스 vs 인터페이스 클래스는 is kind of의 분류의 개념이고 인터페이스는 is able to의 기능추가의 개념이다. 추상화 클래스는 풍부한 개념과 약간의 기능의 추상화를 통해 상속에 우선순위를 둔다. 인터페이스는 기능의 추상화를 통해 다형성에 우선순위를 둔다. 예를들어 동물병원에서 동물과 같이 개념적으로 재사용할 부분은 많지만 실제 객체로 생성되기엔 너무 추상적인 개념일 때 추상화 클래스를 사용할 수 있다. 동물병원에서 취해야할 서비스를 인터페이..
DTO(Data Transfer Object) 계층간 데이터 교환을 위한 객체로 로직을 가지지 않는 순수한 데이터 객체로 필드와 필드 정보 제공을 위한 메소드만 가진다. 클라이언트에게서 폼을 넘겨받는 컨트롤러 계층 사이, 컨트롤러 계층과 애플리케이션 계층 사이 등 Layer를 오갈 때 사용한다. 자바에선 엔티티의 순환참조를 끊는 역할도 한다. @Getter public class PostResponse { private Long id; private String title; private String content; private String nickname; private String username; private LocalDate createDate; private List commentRespon..
오버라이딩이란? 상위 클래스에서 이미 정의된 메소드를 상속받는 하위 클래스에 맞춰서 메소드 오버라이딩을 통해 재정의하는 것 오버라이딩 시에 @Override 어노테이션 필수인가? 메소드 오버라이딩은 동적 할당으로 런타임시에 실행되는데 @Override 어노테이션을 오버라이딩 하는 메소드에 붙여주면 컴파일 시점에 상위클래스가 해당 메서드명을 갖고 있는지, 파라미터는 동일한지를 체크해줄 수 있다. class People{ public void sayMe(){ System.out.println("난 사람"); } } class Chulsu extend Poeple{ public void sayMee(){ // 메소드 오버라이딩 안되지만, 컴파일 시점에 체크하기 어려움 System.out.println("난 철..
인터페이스가 가진 객체지향의 특징 캡슐화, 추상화, 다형성, 상속성 그렇게 생각한 이유는? 1. 캡슐화 : 인터페이스의 구현체가 메소드를 어떻게 구현하는지 모르지만, 추상 메서드를 사용 2. 추상화 : 객체에서 특성을 제외하고 기능만이지만 추상화를 사용해 인터페이스 정의 3. 다형성 : 인터페이스를 구현할 때는 추상화 메서드를 반드시 구체화시켜야하는데 이 과정에서 메소드 오버라이딩 발생 구현체의 인스턴스의 참조변수로 구현체가 아닌 추상화된 인터페이스를 사용 가능 4. 상속성 : 인터페이스의 구현체는 인터페이스의 기능들을 재사용
캡슐화 객체지향세상에선 객체에게 상태를 얻어내는게 아닌 할일을 맡기고 결과물을 얻는다. 이때 할일을 맡길 때 해당 객체가 어떤 과정을 거치는 지는 알 필요도 없고 상황에 따라 접근도 불가해야한다. 자바에선 접근제한자로 필드나 메소드의 접근을 컨트롤하고, 상속이나 인터페이스 같이 구체화 된 객체를 생성하고 추상화에 의존해서 구현체가 어떻게 동작하는지 모른채로 추상메서드 이용 등이 있다. 추상화 객체지향세상에서는 객체를 서비스의 관심영역에 맞게 특징을 뽑아내 인스턴스의 설계도인 클래스로 만든다. 만약 은행 서비스를 만든다면 사용자는 '사람' 에서 은행에 돈을 맡길 '고객'의 특징을 뽑아내는 추상화 과정을 진행한다. 자바에선 클래스를 만들때 해당 클래스에 맞는 필드나 메소드를 정의하는 일이 된다. 다형성 자바..
입출력 외부 데이터는 자바 프로그램 외부에 존재하는 모든 데이터를 의미 하드 디스크상의 프로그램, 네트워크 상의 리소스, 메모리에 있는 자바 프로그램을 제외한 리소스 모두 외부 데이터 외부 데이터의 타입이 무엇이든 외부 데이터를 읽기나 쓰기 작업 시에 java.io나 java.nio의 객체를 사용 IO API Input ~InputStream (1바이트), ~Reader(2바이트) 로 끝나는 객체는 외부 데이터를 읽어오는 기능을 가진 입력 스트림 Output ~OutputStream, ~Writer로 끝나는 객체는 외부로 데이터를 출력하는 기능을 가진 출력 스트림 스트림 객체에서 Stream, Reader, Writer를 제외한 부분이 외부 데이터 타입을 가리킴 표준 입출력 입출력 대상을 지정하지 않았을..