Today I Learned

2024 스파르타 내일배움캠프 Sping 트랙 참여 // day12

shinelee26 2024. 10. 17. 21:36

오늘 진행한 학습 요약

1. Java 문법 종합반 5주차 : 쓰레드, 람다, 스트림, Optional

  • 프로세스와 쓰레드
  • 멀티쓰레드
  • Thread와 Runnable
  • 데몬 쓰레드와 사용자 쓰레드
  • 쓰레드 우선순위와 쓰레드 그룹
  • 쓰레드 상태와 제어

2. 새싹반 2회차 (클래스, 상속)

  • Java 객체와 클래스 이해
  • 상속의 이해
  • 추상 클래스

3.  Git 심화 특강

  • Git Branch와 협업

4. 알고리즘 코드카다  Day2 (작성 생략)

CodingTest Git-hub 링크 : https://github.com/chews26/CodingTest

학습 정리

1. Java 문법 종합반 5주차 : 쓰레드, 람다, 스트림, Optional

  • 프로세스와 쓰레드
    • 프로세스 : 운영체제로부터 자원을 할당받는 작업의 단위
    • 쓰레드 : 프로세스가 할당받은 자원을 이용하는 실행의 단위
  • 멀티쓰레드
    • 메인 쓰레드는 필요에 따라서 작업 쓰레드들을 생성해서 병렬로 코드를 실행시킬 수 있음
    • 즉, Java는 멀티 쓰레드를 지원
      • 장점
        • 여러 개의 쓰레드(실행 흐름)을 통해 여러 개의 작업을 동시에 할 수 있어서 성능이 좋아짐
        • 스택을 제외한 모든 영역에서 메모리를 공유하기 때문에 자원을 보다 효율적으로 사용
      • 단점
        • 동기화 문제
        • 교착 상태(데드락)이 발생
  • Thread와 Runnable
    • Thread 
      • Java에서 제공하는 Thread클래스를 상속받아 구현
      • run()메서드에 작성된 코드가 쓰레드가 수행할 작업
    • Runnable
      • Java는 다중상속 지원X 따라서 Thread를 상속받아 처리하는 방법은 확장성 떨어짐
      • Runnable은 인터페이스이기 때문에 다른 필요한 클래스를 상속받을 수 있어 확장성에 유리
  • 데몬 쓰레드와 사용자 쓰레드
    • 데몬 쓰레드
      • 보이지 않는 곳(background) 에서 실행되는 낮은 우선순위를 가진 쓰레드
    • 사용자 쓰레드
      • 보이는 곳(foregorund)에서 실행되는 높은 우선순위를 가진 쓰레드
  • 쓰레드 우선순위와 쓰레드 그룹
    • 쓰레드는 생성될 때 우선순위가 정해짐
      • 최대 우선순위 (MAX_PRIORITY) = 10
      • 최소 우선순위 (MIN_PRIORITY) = 1
      • 보통 우선순위 (NROM_PRIORITY) = 5
  • 쓰레드 상태와 제어
    • 쓰레드의 상태
    • 상태
      Enum
      설명
      객체생성
      NEW
      쓰레드 객체 생성, 아직 start() 메서드 호출 전의 상태
      실행대기
      RUNNABLE
      실행 상태로 언제든지 갈 수 있는 상태
      일시정지
      WAITING
      다른 쓰레드가 통지(notify) 할 때까지 기다리는 상태
      일시정지
      TIMED_WAITING
      주어진 시간 동안 기다리는 상태
      일시정지
      BLOCKED
      사용하고자 하는 객체의 Lock이 풀릴 때까지 기다리는 상태
      종료
      TERMINATED
      쓰레드의 작업이 종료된 상태
    • 쓰레드 제어 
      • sleep(), interrupt()
      • join(), yield()
      • synchronized
      • wait(), notify()
      • Lock, Condition

 

2. 새싹반 2회차 (클래스, 상속)

  • Java 객체와 클래스 이해
    • Class : 객체를 생성하기 위한 틀, 설계도
    • Attribute : 클래스가 표현하는 특징이나 상태, 속성은 클래스 내부의 변수로 표현
    • Methods : 클래스가 표현하는 대상의 행동이나 기능
    • 생성자 : 객체를 생성할 때 호출되는 특별한 메서드로 객체의 초기화를 담당
    • 객체 : Class에서 정의된 설계도를 바탕으로 메모리상에 생성된 것

 

  • 클래스 실습 진행
    • Attribute : Private String brand;
      • Private한 String(문자열) 속성의 brand
    • 생성자 : public car (String brand) {
                           this.brand = brand; }
      • String brand라는 매개변수를 받아서 그 값을 객체의 필드인 brand에 할당
      • this.brand가 아닌 banana를 입력하면 banana의 값이 할당됨
      • 만약 부모클래스에서 다양한 생성자를 생성할 경우 자식클래스도 모두 생성자를 호출해야하기 때문에 생성자를 적절히 구분하여 만들어야 한다..이것때문에 계속 오류가 발생했었다.
    • Methods : public void brandname ( ) {
                            System.out.println("브랜드 이름은" + brand + "입니다.")

 

  • 객체 실습 진행
    • Car 전기차 = new Car("테슬라", "BLUE", 300, "전기");
      • 클래스를 기반으로 객체를 생성!
      • 처음 입력값은 brand에 할당됨~

  • 상속의 이해
    • 상속은 부모클래스의 기능을 자식클래스가 모두 사용할 수 있음
    • 자식클래스는 부모클래스의 기능과 더불어 다양한 기능을 확장해 나갈 수 있음

  • 상속의 장점
    • 코드 재사용성 향상
    • 확장성과 유연성
    • 계층적 분류
    • 다형성
    • 개방-폐쇄 원칙의 실현

 

  • 상속 개념 실습
    • 부모 Classpublic class Car
    • 부모 생성자 : Car(String color){
                                   this.color = color;
                                   speed = 0;}
    • 부모 Methodspublic void displayInfo ( ) {
                                      System.out.println("색상은" + color+ "입니다.")
    • 자식 Class : public class ElectricCar extends Car
    • 자식 생성자 : public ElectricCar(String color, int batteryCapacity) {
                                    super(color);
                                    this.batteryCapacity = batteryCapacity;}
    • 자식 Methods : @Override
                               public void displayInfo() {
                               super.displayInfo();
                               System.out.println("배터리 용량은" + batteryCapacity);
    • 상속 주요 개념 설명
      • extends로 부모클래스 Car를 상속
      • @Override로 부모 클래스의 메서드를 자식 클래스에서 재정의
      • super로 부모생성자를 호출!
      • super.으로 부모Methods를 호출!

 

  • 추상 클래스
    • 클래스의 상속을 위해 사용되는 개념
    • 상 클래스 자체로는 객체를 생성할 수 없으며, 반드시 상속을 통해 그 기능이 구현
    • 공통적인 기능을 가진 클래스를 설계할 때, 특정 메소드는 상속받는 클래스에 따라 다르게 동작해야 할 필요가 있을 때 사용
  • 인터페이스
    • 모든 메소드가 추상 메소드인 특별한 형태의 클래스
    • Java에서는 클래스가 여러 인터페이스를 구현할 수 있으므로, 다중 상속의 효과를 낼 수 있음
    • 인터페이스는 메소드의 구현을 강제하여 일관된 디자인을 유지할 수 있도록 도와줌
  • 다형성
    • 많은 형태를 가질 수 있는 성질'을 의미
    • 객체 지향 프로그래밍에서 한 객체가 여러 타입을 가질 수 있는 것
    • 주로 상속과 인터페이스를 통해 구현

3.  Git 심화 특강

  • Git Branch와 협업
    • 테스트용(dev) 브랜치를 만들어서 테스트
    • Settings -> Default Branch : dev로 변경을 하여 Main의 충돌을 최소화
  • 1. origin dev에서 dev로 pull
  • 2. dev에서 test1로 브랜치 switch
  • 3. test1에서 origin test1로 push
  • 3. test1에서 origin dev pull
  • 4. test1에서 origin test1로 push
  • 5. origin test1은 origin dev로 pull requests