오늘 진행한 학습 요약
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은 인터페이스이기 때문에 다른 필요한 클래스를 상속받을 수 있어 확장성에 유리
- Thread
- 데몬 쓰레드와 사용자 쓰레드
- 데몬 쓰레드
- 보이지 않는 곳(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 + "입니다.")
- Attribute : Private String brand;
- 객체 실습 진행
- Car 전기차 = new Car("테슬라", "BLUE", 300, "전기");
- 클래스를 기반으로 객체를 생성!
- 처음 입력값은 brand에 할당됨~
- Car 전기차 = new Car("테슬라", "BLUE", 300, "전기");
- 상속의 이해
- 상속은 부모클래스의 기능을 자식클래스가 모두 사용할 수 있음
- 자식클래스는 부모클래스의 기능과 더불어 다양한 기능을 확장해 나갈 수 있음
- 상속의 장점
- 코드 재사용성 향상
- 확장성과 유연성
- 계층적 분류
- 다형성
- 개방-폐쇄 원칙의 실현
- 상속 개념 실습
- 부모 Class : public class Car
- 부모 생성자 : Car(String color){
this.color = color;
speed = 0;} - 부모 Methods : public 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