본문 바로가기
❤️‍🔥TIL (Today I Learned)

[TIL] 2022-12-02(25day)

by elicho91 2022. 12. 2.

 

테스트 코드와 Thread이해


👉 Test 코드

# 의도대로 정확히 작동하는지 검증까지 하기위해 사용.

 

# 장점

  - 개발 과정 중 예상치 못한 문제를 미리 발견할 수 있다.

  - 작성한 코드가 의도한 대로 작동하는지 검증할 수 있다.

  - 코드의 변경, 추가, 삭제 시 사이드 이펙트를 줄일 수 있다.

    (마음편히 변경, 추가, 삭제, 리펙터링 가능)

 

# Annotation

 - `@Test` : 테스트 메서드임을 나타냄. 실행 가능
 - `@BeforeEach` : 각 메서드 전에 실행됨을 나타냄.
 - `@BeforeAll` : 현재 클래스의 모든 메서드보다 먼저 실행되어야하는 메서드 표시.
 - `@AfterAll` : 현재 클래스의 모든 메서드보다 나중에 실행되어야하는 메서드 표시.
 - `@RepeatedTest` : 메서드 반복 호출을 함을 표시.
 - `@DisplayName` : 사용자 지정 표시 이름을 선언.
 - …

 

# 좋은 테스트 코드를 작성하는 방법

  - 간단하게 만들기

  - 엣지 케이스 테스트 (잘못 발생하지 않는 항목 테스트)

  - 버그를 수정하기 전에 테스트 작성

  - 설명이 포함된 이름 사용

  - 한 번에 하나의 요구 사항 테스트

 

# Test 훈련

더보기
// @BeforeAll , @BeforeEach

...

class PracticeTest {
	@BeforeAll
  static void setUp() {
      System.out.println("@BeforeAll - executes once before all test methods in this class");
  }

  @BeforeEach
  void init() {
      System.out.println("@BeforeEach - executes before each test method in this class");
  }
}
//@AfterEach @AfterAll

...

	@AfterEach
  void tearDown() {
      System.out.println("@AfterEach - executed after each test method.");
  }

  @AfterAll
  static void done() {
      System.out.println("@AfterAll - executed after all test methods.");
  }
}
//Assertions → 찐 기능 검증

...

	@Test
  @DisplayName("람다 사용")
  void lambdaExpression() {
      List<Integer> numbers = Arrays.asList(1, 2, 3);

      assertTrue(numbers.stream()
              .mapToInt(Integer::intValue)
              .sum() > 5, () -> "Sum should be greater than 5");
  }

...
//구현 클래스

...

public class Practice {
    public Integer sumInt(int a, int b) {
        return a + b;
    }
    public Double average(List<Integer> integers) {
        return integers.stream().mapToInt(Integer::intValue).average().getAsDouble();
    }
}
//테스트

...

@Test
    @DisplayName("sum 메소드 성공 테스트")
    void sumTest() {
        Integer sumInt = practice.sumInt(1, 2);

        assertNotNull(sumInt);
        assertEquals(sumInt, 3);
    }

  @Test
  @DisplayName("average 메소드 성공 테스트")
  void average() {
      Double average = practice.average(Arrays.asList(1, 2, 3, 5, 6));

      assertNotNull(average);
      assertEquals(average, 3.4);
  }

 


👉 스레드 Thread

# JVM 구조 복습

 

# JVM Call Stack

  - main stack frame에서 일어나는 일 들 / Stack 자료구조! Last-In, First-Out / LIFO 구조

...

int main(void){
    func1();  // func1() 호출

    return 0;
}

void func1(){
    func2();  // func2() 호출
}

void func2(){
}
...
  1. 프로그램이 실행되면, 가장 먼저 main() 함수가 호출되어 main() 함수의 스택 프레임이 스택에 저장.
  2. func1() 함수를 호출하면 해당 함수의 매개변수, 반환 주소값, 지역 변수 등의 스택 프레임이 스택에 저장.
  3. func2() 함수를 호출하면 해당 함수의 스택 프레임이 추가로 스택에 저장.
  4. func2() 함수의 모든 작업이 완료되어 반환되면, func2() 함수의 스택 프레임만이 스택에서 제거.
  5. func1() 함수의 호출이 종료되면, func1() 함수의 스택 프레임이 스택에서 제거.
  6. main() 함수의 모든 작업이 완료되면, main() 함수의 스택 프레임이 스택에서 제거되면서 프로그램이 종료.

# Thread와 Multi Thread 프로그래밍

  - Main Thread

     모든 자바 프로그램은 메인 스레드가 psvm을 실행하며 시작.

     main 스레드는 작업 스레드들을 만들어 병렬로 코드들을 실행.

 

  - 프로세스의 종료

    싱글 쓰레드 : 메인 쓰레드가 종료하면 프로세스도 종료.

    멀티 쓰레드 : 실행 중인 쓰레드가 하나라도 있다면, 프로세스 미종료.

 

# Thread Scheduling 

  - 컴퓨터가 동시에 처리할 수 있는 최대 작업 수는 CPU 코어(core) 수와 같다.

    스레드의 개수가 코어의 수보다 많을 경우, 스레드를 어떤 순서로 동시성을 실행할 것인가 결정하는 스레드 스케줄링.

  • 자바의 스레드 스케줄링은 우선 순위(Priority) 방식과 순환 할당(Round-Robin) 방식 사용. 기본 메커니즘은 Queue 구조를 가짐
    • 우선 순위 방식 : 우선 순위가 높은 스레드가 실행 상태를 더 많이 가지도록 스케줄링. : 1~10까지 값을 가질 수 있으며, 기본은 5.
    • 순환 할당 방식 : 시간 할당량(Time Slice)을 정해서 하나의 스레드를 정해진 시간만큼 실행.
스레드의 일반적인 상태
 
스레드의 일시 정지 상태

 

 

상태 제어 1.실행 중인 스레드의 상태를 변경하는 것 상태 변화를 가져오는 메소드의 종류

👉 osi 7계층

# 네트워크 : 정보가 전송되는 경로. 

# 글로벌 네트워크 구성을 위해 전세계 모든 컴퓨터를 연결하기 위해서는

  - 통신 장비(LAN 장비, WAN 장비) / 통신 역할(서버, 클라이언트) / 통신 규칙(TCP/IP 규칙) 필요

 

# LAN vs WAN

  • LAN (Local Area Network)  : 사무실이나 빌딩처럼 비교적 좁은 범위의 네트워크를 말한다.
  • WAN (Wide Area Network) : 서로 떨어져 있는 LAN 사이를 전용선 등으로 연결한 광역 네트워크를 말한다.

 

 

# 클라이언트 vs 서버

  • 클라이언트 : 네트워크상에서 서버에게 서비스를 요청하는 장비 : 컴퓨터, 노트북, 핸드폰, 아이패드 등…
  • 서버 : 네트워크상에서 서비스를 제공하는 장비 : 공유기, 도메인 관리기(DNS), IP 할당기(DHCP), 시간관리기(NTP), 게이트웨이 등…

# OSI 7계층

  - 규칙이 없어 난장판이었던 네트워크를 OSI 7계층 모델을 만들어서 네트워크 기본 구조를 가이드로 만든것

 

 


🙋‍♂️ 소감 : 

 

오늘 강의들은 CS적인 이해가 많이 필요한 강의들이었다.

그냥 단순히 코드를 짜고, 결과가 나오면 되는것이 아니라,

어떻게 하면 비용을 아끼면서 효율적으로 코드를 짤 수 있을까를 고민해야하는데,

아직은 그 수준에 한참 미치지 못해서, 당장은 그냥 아웃풋만 나와도 좋다.

언젠간 효율성을 생각하면서 코딩하는 날이 오겠지....ㅎㅎ

     

'❤️‍🔥TIL (Today I Learned)' 카테고리의 다른 글

[TIL] 2022-12-06(27day)  (0) 2022.12.05
[TIL] 2022-12-05(26day)  (0) 2022.12.05
[TIL] 2022-12-01(24day)  (0) 2022.12.01
[TIL] 2022-11-30(23day)  (0) 2022.11.30
[TIL] 2022-11-29(22day)  (0) 2022.11.29

댓글