- public: main() 메서드가 외부에서 접근 가능한 접근 제어자(public)를 가지고 있음을 나타냅니다. - static: main() 메서드가 정적(static) 메서드임을 나타냅니다. 따라서, 객체를 생성하지 않고도 클래스 이름으로 직접 접근할 수 있습니다. - void: main() 메서드가 반환하는 값이 없음(void)을 나타냅니다. - main: Java 프로그램의 시작점이 되는 메서드 이름입니다. - String[] args: main() 메서드의 매개변수로, 프로그램 실행 시 전달받은 인자들을 문자열 배열(String[]) 형태로 전달받습니다. 이를 통해, 프로그램의 동작을 유연하게 조정할 수 있습니다. 예를 들어, 윈도우 운영체제에서 명령 프롬프트(cmd) 창을 열고 "java ..
Java 프로그램의 컴파일 및 실행 과정은 크게 두 단계로 나눌 수 있습니다. 첫 번째 단계는 소스 코드를 컴파일하여 바이트 코드(Bytecode)로 변환하는 단계이며, 두 번째 단계는 JVM(Java Virtual Machine)에서 바이트 코드를 실행하는 단계입니다. 각 단계는 아래와 같습니다. 1. 소스 코드 작성 자바 프로그램은 텍스트 파일 형태로 작성되며, .java 확장자를 가집니다. 소스 코드는 텍스트 에디터를 사용하여 작성할 수 있습니다. 2. 컴파일 자바 컴파일러(javac)를 사용하여 소스 코드를 바이트 코드로 변환합니다. 변환된 바이트 코드는 .class 확장자를 가집니다. 3. 클래스 로딩 JVM은 실행할 클래스를 찾아서 메모리에 로딩합니다. 이때, 클래스 파일의 정보를 저장하는 메..
Static 멤버와 Non-Static 멤버의 차이 staitc 멤버 non-static 멤버 From 클래스에 속하는 멤버 객체에 속하는 멤버 초기화 시점 클래스가 로딩될 때 초기화되며, 프로그램 종료까지 메모리에 유지 객체가 생성될 때 초기화되며, 객체가 삭제될 때까지 메모리에 유지 생성 타이밍 클래스를 로딩할 때 생성되며, 클래스의 인스턴스를 생성하지 않고도 사용 O 클래스의 인스턴스를 생성해야 사용 Value 클래스마다 공유되는 값 객체마다 다른 값 용도 유틸리티 메서드 등을 표현, 상수 값을 저장하는 데 사용 객체의 상태를 표현,객체 간의 관계를 나타내는 데 사용 ex 데이터베이스의 연결 정보나, 프로그램에서 공유해야 할 상수 값 학생 객체를 생성하면서 학생의 이름, 학번, 성적 등의 정보 St..
HashMap, HashTable, ConcurrentHashMap,LinkedHashMap 차이 HashMap 데이터를 저장할 때 키-값 쌍으로 저장하며, 키는 중복되지 않으며 null을 허용합니다. 값은 중복되어도 상관없으며, null도 허용합니다. HashMap은 동기화가 되어있지 않기 때문에 멀티스레드 환경에서 사용할 때는 주의가 필요 HashMap은 여러 쓰레드가 동시접근할경우 생기는 문제점 HashMap은 여러 스레드가 동시에 접근할 경우, 데이터 일관성 문제가 발생할 수 있습니다. 이는 다음과 같은 상황에서 발생할 수 있습니다. 해시 충돌이 발생하는 경우, 같은 인덱스에 여러 데이터가 중복되어 저장될 수 있습니다. 이 때는 링크드 리스트를 이용하여 데이터를 추가로 연결하는데, 데이터가 많이 ..
@GeneratedValue(strategy = GenerationType.IDENTITY)란? ForeignKey 설정하기 아래와 같이 테이블이 있을때 코드로 설정하는 방법 Menu.class에 Foreign Key 설정 @ManyToOne @JoinColumn(name = "storeId", referencedColumnName = "storeId", foreignKey = @ForeignKey(name = "fk_menu_store")) private Store store; @ManyToOne @JoinColumn(name = "foodId", referencedColumnName = "id", foreignKey = @ForeignKey(name = "fk_menu_food")) private F..
1.여러개의 Service를 클래스를 만들어도 하나만 @Service를 정할수있다. 2. @Service라고 정했을 경우 테스트 케이스에서 따로 객체를 만들지 않아도 @Service에 속한 @Component가 자동으로 객체를 만들어서 넣어준다. @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface Service { /** * The value may indicate a suggestion for a logical component name, * to be turned into a Spring bean in case of an autodetected component. * @..
MockMVC란? MockMvc는 Controller테스트 할때 사용합니다. 왜냐하면 Controller에서 컨트롤러의 요청과 응답에 대한 테스트를 해야하는데 MockMvc가 실제 HTTP 요청을 보내지 않고 Application내부에서 요청/응답 처리를 해주기 때문입니다. *초기화 방법 1) @AutoConfigureMockMvc @SpringBootTest class FoodControllerTest { private MockMvc mockMvc; ... mockMvc = MockMvcBuilders.standaloneSetup(new FoodController(foodService)).build(); 2) @AutoConfigureMockMvc @SpringBootTest class FoodCont..
Logical address VS physical address Logical address(=vitual address) 프로세스마다 독립적으로 가지는 주소공간 각 프로세스마다 0번지 부터 시작 CPU가 보는 주소는 logical address 프로그램 실행 중에 CPU가 생성하는 주소로 가상 주소라고도 한다. physical address 메모리에 실제 올라가는 위치(실행되기 위해서) *주소바인딩 : 주소를 결정하는 것 Symbolic address(프로그래머가 지정/호출하는 변수/함수) -> Logical address -> physical address 물리적 메모리가 결정되는 시점 Compile time biniding - 물리적 메모리에 다른 주소가 비어있어도, 컴파일시에 이미 물리적주소가 정..
Deadlock이란? 상호배제에 의해 나타나는 문제점. 둘 이상의 프로세스들이 각각 자원을 점유한 상태에서, 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 서로의 작업이 끝나기만을 기다리다가 영원히 끝나지 않는 상황을 의미한다. Deadlock 이 동작하기 위한 4가지 조건 - Mutual exclusion (상호배제) : 매 순간 하나의 프로세스만이 자원을 사용할 수 있음 -> 자원을 얻었으면 독점적으로 쓴다. - No preemption(비선점) : 프로세스는 자원을 스스로 내어놓을 뿐 강제로 빼앗기지 않음 - Hold and wait(보유 &대기) : 자원을 가진 프로세스가 다른 자원을 기다릴때 보유자원을 놓지 않고 계속 가지고 있음 - Circular wait (순환대기): 자원을 기다리는 ..
1.왜 JpaRepository를 상속하는가? Spring Data JPA에서 제공하는 다양한 메소드를 사용하여 데이터 액세스 작업을 쉽게 구현하기 위해서 *JpaRepository 인터페이스란? CRUD 작업과 검색 등의 데이터 액세스 작업을 추상화한 인터페이스 2. Repository 인터페이스가 JpaRepository를 상속하는 이유 Spring Data JPA에서 제공하는 다양한 메소드를 사용해, Post 엔티티에 대한 데이터 액세스 작업을 쉽게 구현하기 위해 Repository 인터페이스가 JpaRepository를 상속하면, -> Post 엔티티에 대한 CRUD 작업과 검색 등의 데이터 액세스 작업을 수행할 수 있는 다양한 메소드를 사용 ex. findAll(), findById(), sav..