-
3일차 Java 심화 내용
Test : ( Alt + Insert ) 매번 프로그램 돌릴 필요없이 테스트 코드로 테스트 가능
- 개발 과정 중 예상치 못한 문제를 미리 발견할 수 있다.
- 작성한 코드가 의도한 대로 작동하는지 검증할 수 있다.
- 코드의 변경, 추가, 삭제 시 사이드 이펙트를 줄일 수있다.
- → 마음편한 변경, 추가, 삭제 가능
- → 마음편한 리팩터링 가능! “돌아가는 코드 건들지마라!!” ❌
Annotation
- @Test : 테스트 메서드임을 나타냄. 실행 가능
- @BeforeEach : 각 메서드 전에 실행됨을 나타냄
- @BeforeAll : 현재 클래스의 모든 메서드보다 먼저 실행되어야하는 메서드 표시
- @AfterAll : 현재 클래스의 모든 메서드보다 나중에 실행되어야하는 메서드 표시
- @RepeatedTest : 메서드 반복 호출을 함을 표시
- @DisplayName : 사용자 지정 표시 이름을 선언
더 공부하기 : Good-unit-test
Thread
JVM 구조 JVM Call Stack
stack frame : 코딩의 시작, TCP School
코딩교육 티씨피스쿨
4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등
tcpschool.com
main stack frame에서 일어나는 일 들
... int main(void){ func1(); // func1() 호출 return 0; } void func1(){ func2(); // func2() 호출 } void func2(){ } ...
Thread와 Multi Thread 프로그래밍
- Main Threadmain 스레드는 작업 스레드들을 만들어 병렬로 코드들을 실행.
- 모든 자바 프로그램은 메인 스레드가 psvm을 실행하며 시작.
- 프로세스의 종료
- 싱글 쓰레드 : 메인 쓰레드가 종료하면 프로세스도 종료.
- 멀티 쓰레드 : 실행 중인 쓰레드가 하나라도 있다면, 프로세스 미종료.
→ 잘못된 처리로, 계속 돌고있는 쓰레드가 하나라도 있다면…? ☠️
Thread Scheduling
💻 컴퓨터가 동시에 처리할 수 있는 최대 작업 수는 CPU 코어(core) 수와 같다.
→ 스레드의 개수가 코어의 수보다 많을 경우, 스레드를 어떤 순서로 동시성을 실행할 것인가
결정하는 스레드 스케줄링.- 자바의 스레드 스케줄링은 우선 순위(Priority) 방식과 순환 할당(Round-Robin) 방식 사용.
기본 메커니즘은 Queue 구조를 가짐- 우선 순위 방식 : 우선 순위가 높은 스레드가 실행 상태를 더 많이 가지도록 스케줄링
( 1~10까지 값을 가질 수 있으며, 기본은 5 ) - 순환 할당 방식 : 시간 할당량(Time Slice)을 정해서 하나의 스레드를 정해진 시간만큼 실행.
- 우선 순위 방식 : 우선 순위가 높은 스레드가 실행 상태를 더 많이 가지도록 스케줄링
★ 개발자가 손수 Thread를 다루기엔 매우매우 어렵고 복잡도가 높다.
Implementing thread using runnable interface (tutorialride.com)동기화(Synchronization) 문제
스레드는 잘 다루면 매우 효율적이지만, 스레드 간섭 및 메모리 일관성 오류라는
두 가지 오류가 발생할 수 있다. 이런 오류를 방지하는 데에 필요한 도구가 동기화.두 개 이상의 스레드가 동일한 리소스에 액세스하려고 시도하고
Java 런타임이 하나 이상의 스레드를 느리게 실행하거나 심지어 실행을 일시 중단할 때
발생하는 스레드 경합을 일으킬 수 있다.