전체 글 58

String, StringBuffer, StringBuilder

이번 장에서는 String , StringBuffer 및 StringBuilder에 대해 알아보려고 합니다. String String은 기본적으로 immutable 즉 변경 불가능한 클래스 입니다. 다음 예시와 함께 알아보도록 하겠습니다. {1} String a = "hello"; String b = "world"; //------ {2} a = a + b; System.out.println(a); // "helloworld" {1}의 과정에서는 a는 hello의 주소인 0x100 을 가르키고 b는 world 주소인 0x200을 각각 가르킵니다. {2}의 과정에서는 새로운 문자열 ("helloworld")이 담긴 instance가 생성되고 a는 이전에 가르키고 있던 0x100 주소 대신 0x300을 가르..

Java 2023.04.24

Enum Validation

Backend Service를 구축 시 Controller 단에서 요청을 받을 때 해당 요청이 유효한 요청인지 검증하기 위해 Dto와 @Valid를 함께 자주 사용합니다. @Valid 어노테이션과, Validation이 제공하는 어노테이션을 사용하면 유효하지 않은 요청사항이 올 경우 미리 MethodArgumentNotValidException을 발생시켜 줍니다. 자세한 설명에 앞서 간단한 예시를 확인하고 넘어가도록 하겠습니다. 가정 사항은 Controller단에서 Dto로 요청을 받아 Service에서 회원을 가입시키는 상황입니다. // RequestDto @Getter public class RequestDto { @NotNull(message = "null 일 수 없습니다.") @NotBlank(m..

Spring 2023.04.24

Junit - Parameterized Test (변수 테스트)

테스트 코드를 작성할 때 특정 변수 값에 따른 테스트 코드를 짜야할 경우가 있습니다. 이러한 경우 모든 변수를 직접 하드코딩 하여 작성해도 되지만 매개변수 테스트를 사용하면 간단한 코드로 효율적으로 실행을 할 수 있습니다. Set에 이름을 저장할 때 제대로 저장되었는지 확인하기 위해 테스트코드를 짠다고 가정해보겠습니다. import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import java.util.HashSet; import java...

Java 2023.04.22

Javadoc 이란?

좋은 API 문서는 성공적인 Software Project를 위한 많은 요소들 중 하나입니다. JDK의 최근 버전들은 모두 Javadoc 도구를 제공합니다. 평소 우리가 프로젝트하는 경우에 대해서는 모두 지원을 한다고 보면 될 것 같습니다. [JavaDoc을 사용하기 위한 전제조건] JDK1.4 이상 PATH 환경 변수에 JDK의 /bin 폴더가 추가되어 있는지 확인 IDE (선택사항) [이번 Post에서 사용한 환경] JDK 17 IntelliJ SpringBoot 3.0.4 Gradle 7.6.1 Java 주석 java에서 사용할 수 있는 주석방식은 다음과 같습니다. (1) // single line comment (2) /* * regular multi-line comment */ (3) /** *..

Java 2023.04.22

Java EE 와 Java SE 뭐가 다른가요?

설명에 앞서 줄임말의 풀 네임을 설명 드리고 시작하려고 합니다. Java SE : Java Platform, Standard Edition Java EE : Java Platform, Enterprise Edition 들어가며 Java 언어의 Platform은 총 네가지의 플랫폼이 존재 합니다. Java SE (Standard Edition) Java EE (Enterprise Edition) Java ME (Micro Edition) JAVA FX 모든 자바 플랫폼은 Java 가상 머신인 (JVM) 위에 애플리케이션 프로그래밍 인터페이스(API)로 구성됩니다. JVM 은 Java 기술 응용 프로그램을 실행하는 특정 하드웨어 및 소프트웨어 플랫폼용 프로그램입니다. API는 다른 소프트웨어 구성 요소 혹은..

Java 2023.04.21

==와 equals()는 어떠한 차이점을 가질까?

그동안 Spring을 사용해 개발하면서 == 과 equals()의 큰 차이점을 모르는 채로 equals() 만 사용을 해왔습니다. 이 부분에 대해 정확히 개념을 잡아보려고 합니다. String 변수 생성 String 변수를 생성하는 방식에는 두가지 방식이 있습니다. literal 을 이용한 방식 new 연산자를 이용한 방식 [literal을 이용한 방식] string constant pool 이라는 영역에 존재하게 됩니다. string constant pool 에 주어진 문자열이 있는지 검색합니다. 문자열이 있으면 해당 주소값을 반환 문자열이 없으면 string constant pool에 넣고 새로운 주소값을 반환 [new 연산자를 이용한 방식] Heap 영역에 존재합니다. == 와 equals() ==..

Java 2023.04.21

Spring Bean의 생명주기

스프링 빈의 라이프 사이클은 다음과 같습니다다. 스프링 컨테이너 생성 => 스프링 빈 생성 => 의존관계 주입 => 초기화 콜백 => 사용 => 소멸 전 콜백 => 스프링 종료 바로 예제와 함께 스프링 빈의 라이프 사이클을 알아보려고 합니다. 다음과 같은 Client 가 있다고 가정합니다. [Client Code] public class Client{ private String clientName; public Client() { System.out.println("생성자 호출, clientName = " + clientName); init(); call("Client 초기화 메세지"); } public void setClientName(String clientName) { this.clientName ..

Spring 2023.04.21

OSI 7계층 TCP / IP 4계층

OSI 7계층은 네트워크 통신을 표준화한 모델로, 통신 시스템을 7단계로 나누어 설명한 것입니다. 하지만 OSI 모델이 실무에서 사용하기에 복잡해 실제 인터넷에서는 이를 단순화 한 TCP/IP 4계층이 사용되고 있습니다. [OSI 7 계층, TCP/IP 4 계층] OSI 7 계층과 TCP/IP 4계층 모델에서 각 계층은 하위 계층의 기능을 이용하고, 상위 계층에게 기능을 제공하는 방식이다. 일반적으로 상위 계층의 프로토콜은 소프트웨어로, 하위 계층의 프로토콜은 하드웨어로 구현된다. 캡슐화 & 역캡슐화 [캡슐화(Encapsulation)] 캡슐화란 통신 프로토콜의 특성을 포함한 정보를 Header에 포함시켜 하위 계층에 전달하는 것을 말합니다. [역캡슐화(Decapsulation)] 역캡슐화란 캡슐화의 반..

CS 지식 2023.04.21

final vs finally vs finalize

위 세가지 단어들은 서로 다르게 사용되는 단어이지만 복습 차원에서 한번 짚고 넘어가려고 합니다. Final final은 '마지막', '변경 될 수 없는'의 의미를 가지고 있으며 거의 모든 대상에 적용 될 수 있습니다. 변수에 사용하면 값을 변경 할 수 없는 상수가 되고, 메서드에 사용하면 오버라이딩을 할 수 없고, 클래스에 사용하면 자손 클래스를 정의 할 수 없습니다. final class Unique{// 조상이 될 수 없는 클래스 final int countRatio = 0.25;// 변경 불가능한 멤버 변수 final int getDiscount(int price){// 오버라이딩 할 수 없는 메서드 int defaultRatio = 0.1;// 변경 불가능한 지역 변수 ... } } 보통 Java..

Java 2023.04.18

싱글톤에 대해서

싱글톤이란 객체지향 프로그래밍에서 사용되는 디자인 패턴 중 하나로, 해당 클래스의 인스턴스가 오직 하나만 생성되도록 보장하는 패턴이다. 현재 주제에서는 다음과 같은 class가 있다고 가정하고 설명을 해보려 한다. 싱글톤 패턴이 적용되지 않았을 때, 싱글톤 패턴이 적용되었을 때로 나누어 알아보려고 한다. AppConfiguration에서 DI(의존성 주입)을 하고 있는 상황. AppConfiguration은 다음과 같다. @Configuration public class AppConfiguration { @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public Mem..

Spring 2023.04.10