Java

    JVM 명세 - Run-Time Data Areas

    공식 JVM 명세 The Java Virtual Machine Specification, Java SE 11 Edition 문서이고 번역은 파파고로 했다. -> 표시 뒤 문장은 내가 단 주석이다. 명세 중 JVM에서 다루는 데이터 유형과 Run-time Data Areas에 대한 내용이다. JVM이란? JVM은 추상적인 컴퓨팅 머신이다. 실제 컴퓨팅 머신처럼, 그것은 명령어 세트를 가지고 있고 실행 시 다양한 메모리 영역을 조작한다. JVM은 자바 프로그래밍 언어에 대해 전혀 알지 못하며, 특정 바이너리 형식, 클래스 파일 형식만 알고 있다. 클래스 파일에는 Java Virtual Machine 명령(또는 바이트 코드)과 기호 테이블 및 기타 보조 정보가 포함되어 있습니다. 형식 및 데이터 유형 1. c..

    자바로 간단한 http 웹 서버 구현

    자바지기님의 유튜브 영상과 자료를 참고하여 실습을 진행한다. 기본으로 제공되는 프로젝트가 있으며 요구사항에 맞춰 코드를 발전시킨다. 요구사항마다 힌트가 있으나 우선 스스로 구현 방법을 생각해본다. https://www.youtube.com/watch?v=qgFVj916nX8&list=PLqaSEyuwXkSqV88SwDxuY56xmj6KsmzRN&index=1 https://www.slideshare.net/javajigi/http-web-server HTTP web server 구현 자바 기반으로 web server를 직접 구현하면서 HTTP 동작 원리에 대해 이해한다. www.slideshare.net 개발 환경 설정 지난 번의 간단한 자바 통신 구현에서 봤던 내용들이다. 프로젝트(위 슬라이드에 깃허브..

    간단한 자바 TCP 통신 구현

    TCP 연결 지향적 프로토콜 (1) 클라이언트가 연결 요청, 서버가 연결 수락하면 통신 선로 고정 (2) 통신 선로를 통해 데이터가 순차적으로 전달 ServerSocket과 Socket 자바는 java.net.ServerSocket과 java.net.Socket을 제공한다. ServerSocket은 클라이언트의 연결 요청 대기, 연결 수락 역할을 한다. Socket은 두 서버 간의 통신에서 데이터를 주고 받는 엔드포인트 역할을 한다. I/O Stream 통신이 연결되었다면 엔드포인트에서 데이터가 왔다갔다 한다. 자바에서 데이터는 Stream을 통해 이동한다. Stream은 단방향이므로 데이터 발신, 수신을 위한 Stream이 각각 필요하다. OutputStream 발신을 위한 스트림이며 바이트 기반 출력..

    자바 빌더 패턴 Java Builder Pattern

    무한 생성자 오버로드(overload) 이미 생성자 오버로드가 너무 많았고 나도 거기에 하나를 더 추가해야 하는 상황이 있었다. 생성자를 호출할 때 매개변수에 대한 정보를 알 수 없는 점이 너무 불편했고 코드도 쓸데없이 너무 길어졌다. // 예시 public class NutritionFacts { private final int servingSize; private final int servings; private final int calories; private final int fat; public NutritionFacts() { this(0) } public NutritionFacts(int servingSize) { this(servingSize, 0) } public NutritionFact..

    Spring Service단에 Interface가 필요한가?

    개인적으로 신규 프로젝트가 좋은 이유는 코드 구조를 바꿔볼 수 있기 때문이다. 기존 프로젝트의 코드를 리팩토링하기란 촉박한 일정에 맞춰 많은 기능을 구현해야 하는 업무 상황상 현실적으로 쉽지 않다. 이 기회를 노려 구조를 바꿔보던 중 Spring Service단에 Interface가 필요한가? 라는 질문을 받게 되었다. 1. 기존에 접하던 구조 Controller단에서 비즈니스 로직 처리 후 바로 DAO 호출하는 코드가 많음 즉 Controller단과 Service단의 분리가 되어있지 않음 특정 조건에 따라 데이터를 가공하는 로직을 이해하는데 시간이 너무 많이 소모된다 중복 로직이 생길 경우 코드는 미친듯이 늘어난다 이번 프로젝트에 REST API를 적용하게 되었고, 그 정신에 알맞게 Controller..

    [JAVA] 메인메소드 public static void main(String[] args)에 대해

    public static void main(String[] args) java.exe로 JVM을 구동시키면 제일 먼저 main()메소드를 찾아서 실행시킨다.*그렇기 때문에 main메소드 이름을 바꾸면 안됨main()메소드를 프로그램 실행 진입점 entry point라 한다 1.public은 접근제어자. main에서 시작해 끝나므로 다른 곳에서 접근을 허용하지 않는다면 의미가 없기 때문에 public으로 지정한다 2.static은 프로그램이 시작하면서 따로 인스턴스 하지 않아도 static으로 선언된 것들은 메모리에 호출되서 프로그램이 종료되는 시점까지 계속 유지가 된다.다른 변수, 메소드, 클래스 경우 목적을 끝낸 후 JVM의 Garbage Collector에 의해 메모리에서 삭제된다. main 메소드가..