Git Commit 내역 영구 삭제하기
·
Etc./Git
방법 1: git filter-branch를 사용하여 파일 영구 삭제1. 로컬 저장소 준비작업할 로컬 저장소로 이동합니다.최신 상태로 업데이트합니다.git fetch --all2. git filter-branch 명령 실행git filter-branch --force --index-filter \ "git rm --cached --ignore-unmatch 경로/삭제할파일명" \ --prune-empty --tag-name-filter cat -- --all예시git filter-branch --force --index-filter \ "git rm --cached --ignore-unmatch secrets.txt" \ --prune-empty --tag-name-filter cat -- --all3...
[Java(자바)] 오버라이딩과 오버로딩
·
Java/Java
오버라이딩상속받은 조상의 메서드를 자신에 맞게 변경하는 것성립조건선언부는 못 바꾸고 내용만 바꿀 수 있다: {구현부}선언부: 반환타입, 메서드이름, 매개변수 목록접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.public > protected > (default) > private예외는 조상 클래스의 메서드보다 많이 선언할 수 없다. class Point2D{ int x; int y; String getLocation() { return "x :" + x + ", y :"+ y; }}class PointObject extends Object{ int x; int y; int z; PointObject(int x, int y, in..
[Java(자바)] Stream(스트림)
·
Java/Java
자바 스트림Java 8부터 추가된 기술로 람다를 활용해 배열과 컬렉션을 함수형으로 간단하게 처리할 수 있는 기술로, 많은 수의 데이터를 다룰 때 유용함기존 방식for문과 Iterator를 사용코드가 길어져서 가독성과 재사용성이 떨어짐데이터 타입(List, Set 등)마다 다른 방식으로 다뤄야 함스트림데이터 소스를 추상화함데이터 소스에 상관없이 모두 같은 방식으로 다룰 수 있으므로 코드의 재사용성이 높아짐데이터를 다루는 데 자주 사용되는 메소드를 정의해 놓음특징데이터 소스를 변경하지 않는다한번 사용하면 닫혀서 다시 사용할 수 없는 일회용이다반복문을 메서드의 내부에 숨길 수 있다데이터 소스를 스트림으로 변환한 후 여러 번의 중간연산과 마지막의 최종 연산을 통해 다룰 수 있다최종 연산이 수행되기 전까지는 중간..
[Java(자바)] JVM(Java Virtual Machine)
·
Java/Java
JVM(Java Virtual Machine) OS에 종속받지 않고 CPU 가 Java를 인식, 실행할 수 있게 하는 가상 컴퓨터JVM이 인식할 수 있는 bytecode로 컴파일하는 과정 필요원시코드(*.java) -> Java bytecode(*.class) -> JVM -> 기계어(Binary Code)구성클래스 로더(Class Loader)실행 엔진(Execution Engine)인터프리터(Interpreter)JIT 컴파일러(Just-in-Time)가비지 콜렉터(Garbage collector)런타임 데이터 영역 (Runtime Data Area)클래스 로더(Class Loader) JVM 내로 클래스 파일(*.class)을 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈런타임시 동적으로 클..
[Java(자바)] Java 21 - Virtual thread
·
Java/Java
기존 vs. 21버전 스레드 모델기존 Java 스레드 모델: Native Thread기존의 KLT(kernel-level thread)와 ULT(user-level thread)를 1:1 매핑하여 사용하는 JVM의 스레드 모델Java의 유저 스레드를 만들면 Java Native Interface(JNI)를 통해 커널 영역을 호출하여 OS가 커널 스레드를 생성하고 매핑하여 작업을 수행하는 형태JNI: JVM에서 다른 언어를 사용할 수 있게 함. 메서드 앞에 native 키워드를 붙여 사용.기존 프로세스 모델을 잘게 쪼개 프로세스 내의 공통된 부분은 공유하면서, 작은 여러 실행단위를 번갈아 가면서 수행할 수 있도록 만듦커널 스레드와 유저 스레드가 매핑단점메모리가 제한된 환경에서는 생성할 수 있는 스레드 수에..
[Java(자바)] 자바의 Thread(쓰레드)
·
Java/Java
프로세스실행 중인 프로그램자원과 쓰레드로 구성쓰레드프로세스 내에서 실제 작업을 수행모든 프로세스는 최소한 하나의 쓰레드를 가지고 있음싱글 혹은 멀티OS 스케줄러가 실행순서 결정쓰레드를 생성한 후에 start()를 호출해야 쓰레드가 작업을 시작함 Java에서는 멀티 스레드를 통해 ‘비동기식 및 병렬 애플리케이션’을 개발할 수 있다멀티쓰레드의 장단점장점시스템 자원을 보다 효울적으로 사용할 수 있음사용자에 대항 응답성이 향상됨작업이 분리되어 코드가 간결해짐단점동기화 주의쓰레드가 자원 공유하며 발생교착상태(dead-lock)가 발생하지 않도록 주의각 쓰레드가 효율적으로 고르게 실행될 수 있게 해야 함쓰레드의 구현과 실행Thread클래스를 상속Runnable인터페이스 구현Thread클래스를 상속자바는 단일 상속이..
[Java(자바)] 메모리 관리와 가비지 컬렉션
·
Java/Java
JVM 구조자바 프로그램이 실행되면 JVM(자바 가상 머신)은 OS로부터 메모리를 할당받고, 그 메모리를 용도에 따라서 여러 영역으로 나누어 관리함Source Code (.java) 파일을 Java Compiler를 통해서 Byte Code(.Class)파일로 변환 (컴퓨터가 이해할 수 있는 코드로 변환)Byte Code로 변환된 파일을 JVM의 Class Loader 로 보냄Class Loader는 말 그대로 Class 파일을 불러와서 메모리에 저장하는 역할Execution Engine 은 Class Loader에 저장된 Byte Code를 명령어 단위로 분류하여 하나씩 실행하게 하는 엔진Garbage Collector 는 사용하지 않거나 필요없는 객체들을 메모리에서 소멸시키는 역할Runtime Dat..
[Java(자바)] Java 접근제어자
·
Java/Java
접근제어자클래스와 클래스의 멤버(필드, 메소드, 생성자)를 사용할 때, 접근할 수 있는  범위를 지정해 주는 역할접근 제한적용 대상접근할 수 없는 클래스public클래스, 필드, 생성자, 메소드없음protected필드, 생성자, 메소드자식 클래스가 아닌 다른 패키지에 소속된 클래스default클래스, 필드, 생성자, 메소드다른 패키지에 소속된 클래스private필드, 생성자, 메소드모든 외부 클래스종류publicprivateprotecteddefaultpublicpublic 접근 제어자가 붙은 변수나 메서드는 어떤 클래스에서도 접근이 가능privateprivate이 붙은 변수나 메서드는 해당 클래스 안에서만 접근이 가능protectedprotected가 붙은 변수나 메서드는 동일 패키지의 클래스 또는 해..
[Java(자바)] 동일성 / 동등성
·
Java/Java
동일성( Identity )== 를 통해 메모리 내 주소값이 같은지 비교하는 것메모리에 저장된 객체 중 같은 객체를 가리킴int, double 같은 Primitive 타입은 객체를 갖지 않기 때문에 == 연산자를 사용했을 때 값이 같으면 true 값이 리턴동등성( Equality )equals() & hashCode() 를 통해 논리적 지위가 같은지 비교하는 것주의동일성이 지켜지면, 동등성은 자연스럽게 따라서 지켜짐동등성이 지켜진다해서, 동일성이 지켜지진 않음void 동일성() { List crews1 = List.of("ash", "ako", "maco"); List crews2 = crews1; System.out.println(crews1 == crews2); // true S..
[Java(자바)] JPA에서 복잡한 쿼리 작성
·
Java/Java
Method NamingJPA 인터페이스 내 메소드 이름으로 복잡한 쿼리를 작성하는 방법단점타입 검사가 안 됨메소드가 길어지면 유지보수 관점에서 좋지 않음주의메서드 명 내 키워드가 존재함예시// User Entity@Entity@Getter@Setterpublic class User { @Id private long userId; @Column(name = "FirstName") private String firstname; @Column(name = "Last_name") private String lastname; private int age; private LocalDateTime startDate; private boolean active;}..