1️⃣ 오픈소스 레포지토리 ForkFork를 통해 다른 사용자(또는 조직)의 레포지토리를 내 레포지토리로 복제한다.GitHub의 Fork와 Clone은 모두 레포지토리를 가져오지만 단순히 원격 저장소의 내용을 로컬 작업 환경으로 가져오는 Clone과는 달리 Fork는 변경사항을 원본 저장소에 반영할지 여부를 선택할 수 있어 주로 오픈 소스 프로젝트에 기여할 때 사용된다. 2️⃣Fork 한 레포지토리 Clone Fork를 통해 복사된 내 레포지토리를 IDE로 Clone 해 로컬 개발 환경에서 작업하기 위한 준비를 한다. 3️⃣ 소스코드 수정 및 commit, push오픈 소스에서 수정할 코드 및 문서를 찾아 수정한다. 나의 경우 Spring Boot 코드를 읽으며 수정할 내용을 찾았다.오픈 소스들은 보통 ..
Study
이 글은 오라클의 공식문서의 다이어그램에서 온 의문으로부터 시작되었다. ✅ Method 영역(Perm Gen)은 Non-heap 영역이다오라클 공식 문서를 보면 Method 영역을 Non-heap 영역으로 구분한다는 것을 찾아볼 수 있다. 위 다이어그램은 JVM의 메모리 튜닝 인자를 설명하고 있는데 메모리 튜닝 인자 관점에서 볼 때 Perm Gen은 힙 영역의 일부가 아니라는 것을 확실하게 확인할 수 있다. 또, 힙 공간이 고갈되면 아래와 같은 메세지를 받지만java.lang.OutOfMemoryError: Heap space spacePerm Gen 영역이 고갈되면 다른 에러 메세지를 받는다.java.lang.OutOfMemoryError: PermGen space 그렇다면 왜 오라클의 공식문서에는 ..
런타임 데이터 영역(Runtime Data Area)은 실제 클래스 파일이 적재되는 곳으로 JVM이 OS로부터 자바 프로그램 실행을 위한 데이터와 명령어를 저장하기 위해 할당받는 메모리 공간이다. 런타임 데이터 영역은 크게 다섯 가지 영역으로 나뉜다.메서드 영역 (Method Area)힙 영역 (Heap Area)스택 영역 (Stack Area)PC 레지스터 (Program Counter Register)네이티브 메서드 스택 (Native Method Stack) 그리고 Java에서 Thread가 공유하는 영역과 공유하지 않는 영역은 다음과 같다.🫧 Thread가 공유하는 영역힙 영역메서드 영역🫧 Thread가 공유하지 않는 영역스택 영역PC 레지스터 영역네이티브 메서드 스택 🌱 PC 레지스터 (P..
🌱 지역 / 매개변수 위치 🫧 기본 자료형 (정수, 소수, boolean) public class Test { public static void main(String[] args) { // 지역변수 int intValue = 10; double doubleValue = 3.14; char charValue = 'A'; boolean booleanValue = true; // 매개변수 public static void printInt(int number) { System.out.println("Received int value: " + number); } } } 메서드 내에 생성되거나 전달된 지역/매개변수에 할당된 값이 기본 자료형일 경우 stack에 저장되고 메서드 종료 시 소멸된다. 🫧 참조 자료형 (..
🌱 트랜잭션 격리 수준(Transaction Isolation Level) 트랜잭션의 격리 수준(Isolation Level)이란 여러 트랜잭션이 동시에 처리될 때, 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 여부를 결정하는 것이다. 트랜잭션 격리 수준은 격리(고립) 수준이 낮은 순서대로 READ UNCOMMITED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE가 존재한다. READ UNCOMMITED READ COMMITTED REPEATABLE READ SERIALIZABLE 참고로 아래의 예제들은 모두 자동 커밋(AUTO COMMIT)이 false인 상태에서만 발생한다. 1️⃣ READ UNCOMMITED (Level 0..
🌲 equals와 hashCode란?equals와 hashCode는 모든 Java 객체의 부모 객체인 Object 클래스에 정의되어 있다.따라서 Java의 모든 객체는 Object 클래스에 정의된 equals와 hashCode 함수를 상속받고 있다. 🌱 equals() 란?public boolean equals(Object obj) { return (this == obj);} 🫧 '==' 연산자와 동일성(identity)자바에서 '==' 연산자는 객체의 메모리 주소를 비교하기 때문에 두 객체가 서로 다른 메모리 주소에 할당되어 있다면 두 객체를 다른 것으로 판단한다. 따라서 '==' 연산자는 주로 기본 타입의 값이나 객체의 참조 자체를 비교할 때 사용된다.하지만 동등성을 올바르게 판단하지 못하..
인스턴스화를 막는 이유 1. 불필요한 인스턴스 생성 방지 어떤 클래스가 여러 번 인스턴스화되어도 동일한 객체를 반환해야 할 때가 있다. 이런 경우, 생성자를 직접 호출하지 못하게 하고 미리 생성된 인스턴스를 제공함으로써 불필요한 객체 생성을 방지해 메모리와 성능을 최적화할 수 있다. 2. 상태의 불변성 유지 비밀번호 해싱 라이브러리같이 해싱된 비밀번호를 변경하지 못하도록 하기 위해 인스턴스화를 막을 수 있다. 3. 싱글톤 패턴 싱글톤은 어떤 클래스의 인스턴스가 오직 하나만 존재해야 하는 경우 사용된다. 이 경우, 클래스의 생성자를 private로 만들어 외부에서 인스턴스를 생성하지 못하게 하고, 정적 메서드나 정적 변수를 사용하여 하나의 인스턴스를 관리한다. 4. 상속 제어 어떤 클래스를 다른 클래스에서..
싱글톤(Singleton) 패턴 소프트웨어 디자인 패턴에서 싱글톤 패턴(Singleton pattern)을 따르는 클래스는, 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다. 이와 같은 디자인 유형을 싱글턴 패턴이라고 한다. 주로 공통된 객체를 여러개 생성해서 사용하는 DBCP(DataBase Connection Pool)와 같은 상황에서 많이 사용된다. 싱글톤 패턴은 간단히 객체의 인스턴스를 한 개만 생성되게 하는 패턴이다. public static final 필드 방식의 싱글톤 public class Elvis { public static final Elvis INSTANCE = new Elvis(); priva..
정적 팩토리와 생성자는 선택적 매개변수가 많을 때 적절히 대응하기 어렵다는 제약이 있다. 점층적 생성자 패턴 public class NutritionFacts { private final int servingSize;// 필수 private final int servings;// 필수 private final int calories;// 선택 private final int fat;// 선택 private final int sodium;// 선택 private final int carbohydrate;// 선택 public NutritionFacts(int servingSize, int servings) { this(servingSize, servings, 0); } public NutritionFact..