본문 바로가기

분류 전체보기47

@NotNull, @NotEmpty, @NotBlank 프로젝트를 진행하면 객체의 제약조건을 검증해야 하는 일이 많이 있다. 객체의 필드가 필수적으로 값을 가지게 하고 싶을 때 우리는 NotNull 을 많이 사용한다. 그렇다면  @NotEmpty, @NotBlank 는 무엇일까? 1.  @NotNull@NotNull 은 말 그대로 Null을 허용하지 않겠다는 것이다. @NotNullprivate String name;"" 이렇게 빈 문자열도 가능하고 " " 공백으로 이루어진 문자열도 가능하다.name = null 불가name = "" 가능name = "   " 가능 2. @NotEmpty@NotEmptyprivate String name;@NotEmpty 는 @NotNull 에서 "" 빈 문자열 제약 조건이 추가된다. 따라서 " " 빈 공백 문자열은 허용된다.. 2024. 7. 11.
IOC/DI - 제어의 역전/의존성 주입 1. 의존성이란?먼저 IOC와 DI를 설명하기 전에 의존성이란 무엇일까? 예를들어 A객체와 B객체가 있다고 하자 그런데 A객체를 사용하기위해 B객체가 필요하다면 그것은 A객체가 B객체에 의존한다고 한다. 쉽게 생각하면 의존성은 new 다.! A객체를 사용하기 위해 다른 객체를 new로 생성해야한다면 A객체는 생성된 객체에 의존하게 된다. class ClassA{ ClassB b = new ClassB();}class ClassB{ String my; ClassB(){ this.my = "ClassB"; }} 2. DI - 의존성 주입이란?위에서 의존이란 new 라고 했다. 그렇다면 의존성주입이란 무엇일까? 다시 쉽게 생각하면 외부에서 new를 주입시켜준다고 생각해보자 위.. 2024. 7. 7.
객체지향 설계 5원칙 좋은 소프트웨어 설계를 위해서는 결합도는 낮추고 응집도는 높이는 것이 바람직하다. 결합도는 모듈(클래스) 간의 상호의존 정도로서 결합도가 낮으면 모듈간의 상호 의존성이 줄어들어 객체의 재사용이나 수정, 유지보수가 용이하다.응집도는 하나의 모듈 내부에 존재하는 구성 요소들의 기능적 관련성으로 응집도가 높은 모듈은 하나의 책임에 집중하고 독립성이 높아져 재사용이나 기능의 수정, 유지보수가 용이하다. 1. SRP(Single Responsibility Principle) 단일 책임 원칙단일책임 원칙은 클래스가 가지는 책임은 단 하나, 즉 클래스가 변경되는 이유는 단 하나여야 한다는 것이다. 1-1 잘못된 코드class Restaurant { void 음식판매(){ System.out.prin.. 2024. 7. 6.
heap 영역과 Garbage Collection hip 영역은 객체들의 놀이터로서 객체 멤버 변수들은 객체와 함께 가비지 컬렉터라고 하는 힙 메모리 회수기에 의해 일생을 마친다고 했다.그러면 Garbage Collection이 어떻게 동작하는지 알아보자1. Garbage Collection이란?Garbage Collection은 자바의 메모리 관리 방법으로 heap 영역에서 동적으로 할당했던 메모리 중 더이상 사용하지 않는 즉 필요없게 된 메모리 객체를 주기적으로 제거해 주는 것을 말한다.C언어에서 malloc(), free() 함수를 사용해 보았다면 free() 함수와 유사한 역할을 한다. c언어에서는 메모리 해제를 개발자가 직접 해줘야 하지만 java에서는 Garbage Collection이 자동으로 메모리를 관리해 준다.2.  heap 영역의 구.. 2024. 6. 30.
메모리와 StackOverFlow stack에 메모리가 지속적으로 쌓인다면1. 메모리 구조와 상황 hip 영역의 메모리는 낮은 주소에서 높은 주소로 할당되고 stack 역역은 높은 주속에서 낮은 주소의 방향으로 할당된다. 한정된 메모리 크기에 stack 메모리가 지속적으로 쌓인다면 어떻게 되는지 알아보았다. 자바의 메모리 구조      2. 실험코드public class Main { public static void main(String[] args) { int cnt = 0; run(cnt); } static String run(int cnt){ cnt++; System.out.println("재귀호출" + cnt); run(cnt); retur.. 2024. 6. 28.
자바의 메모리 구조 1. 자바의 메모리 구조자바로 개발을 하다보면 수많은 코드를 작성하게 된다. 이 수많은 코드들에 메모리 상에서 어떻게 관리되는지 알아보자메모리 구조 이미지2. 자바의 절차적 구조적 프로그래밍2-1 static 영역static 영역은 클래스들의 놀이터 이다.JVM은 가장 먼저 java.lang 패키지를 메모리의 스태틱 영역에 가져다 놓고 다음으로 개발자가 작성한 모든 클래스와 임포트 패키지 역시 스태틱 영역에 가져다 놓는다.클래스 멤머도 여기에 저장된다. static 키워드가 붙어있는 코드라고 생각하면 되겠다.이 영역에 저장된 내용은 프로그램 시작전에 로드되고 프로그램 종료시에 소멸된다.2-2 hip 영역hip 영역은 객체들의 놀이터 이다.객체가 생성되면 속성의 값을 저장하기 위한 메모리 공간이 힙 영역에.. 2024. 6. 28.
쓰레드의 동기화 자바를 공부하면서 멀티스레드에 대해 간단한 실습을 해 보았는데 내 생각과 다른 결과물이 나와 이에 대해 공부해 보려한다. 스태틱 영역스택 영역힙영역스레드스레드 멀티스레드는 하나의 T메모리 안에서 스택 영역만 분할한 것이기 때문에 하나의 스레드에서 다른 스레드의 스택 영역에는 접근 할 수 없지만 스태틱 영역과 힙 영역은 공유해서 사용하는 구조다.  출처-스프링 입문을 위한 자바 객체 지향의 원리와 이해 위의 메모리 구조를 이해 하였다면 아래의 코드를 살펴보자public class Main extends Thread{ static int share; public static void main(String[] args) { Main t1 = new Main(); Main t.. 2024. 6. 26.