[F-lab 모각코 챌린지 44일차]TIL

JeongheeKim·2023년 7월 14일

TIL

목록 보기
44/66

학습계획


  • 스프링 입문을 위한 자바 객체지향의 원리와 이해 3장 - 추상화 학습
  • java17 새로운 기능 정리
  • 완전탐색

Today I Learned


멀티프로세스에서는 각 프로세스 마다 고유한 T메모리 구조(static,stack,heap을 편의상 지칭하는 이름)가 있어 서로 참조 불가하지만 메모리 사용량은 크다.

멀티 스레드는 하나의 T메모리 안에서 스택 영역만 분할한 것이기 때문에 하나의 스레드에서 다른 스레드의 스택 영역에 접근 불가지만, static & heap영역은 접근이 가능하다.

❓서블릿은 request마다 프로세스가 아닌 스레드를 생성한다. 어떠한 이유일까?

요청 마다 프로세스가 생성되면 각자 독립된 T메모리 영역이 생성되어 메모리 사용량이 크다. 전역변수, static 변수등의 공유도 불가하다. 이러한 이유로 static & heap영역을 공유하여 사용하고 스레드가 프로세스의 자원을 공유하여 프로세스 대비 적은 메모리를 사용하여 프로그래밍 할 수 있기때문

세상에 존재하는 유일무이한 객체를 특성(속성 + 기능)에 따라 분류하여 객체를 통칭할 수 있는 집합적 개념 → 클래스(분류)

클래스는 분류에 대한 개념

클래스를 이용해 객체를 만들었다는것을 표현할때는 인스턴스라고 표현한다.

사람 김연아 = new 사람();

펭귄 뽀로로 = new 펭귄();

정적 속성은 UML표기에서 밑줄을 사용하여 표시한다.

Mouse
name
age
countOfTail1
sing()

정적 속성인 경우 T메모리 static 영역에 클래스가 배치될 때 클래스 내부에 메모리 공간이 확보되는것을 보여 준다.

객체 속성은 힙 영역에 객체가 생성되면 바로 그때 각 객체안에 멤버 속성을 위한 메모리 공간이 할당된다.

객체지향의 4대 특성 - 캡.상.추.다

추상화 = 모델링

추상화란 구체적인 것을 분해해서 관심영역(application context)에 있는 특성만 가지고 재조합 하는것

관심있는 특성만 추출해서 사물을 단순하게 표현하는것

객체지향에서 추상화의 결과는 클래스다.


var keyword(java 10)

로컬 변수 선언을 간결하게 사용할 수 있게 도와준다. 하지만 타입을 var로 치환해서 쓰다보면 프로그래머에게 타입을 숨기게 될 수 도있다.

var 키워드변수에 람다식을 할당할 수 없지만, 람다 표현식에는 사용할 수 있다.

private void method1() {
    var myMap = new HashMap<String, List<Member>>();
    //var str = String::new;
    List<String> stringList = new ArrayList<>();
    boolean isBoolean = stringList.stream().anyMatch((var s) -> s.equals("test"));
    Runnable r = () -> System.out.println("hello world");
}

Sealed Classes

무분별한 상속을 막기 위해 지정된 클래스만 상속되도록 설정

public abstract sealed class Vehicle permits Car, Truck {
protected final String registrationNumber;

    public Vehicle(String registrationNumber) {
        this.registrationNumber = registrationNumber;
    }

    public String getRegistrationNumber() {
        return registrationNumber;
    }
}
public final class Truck extends Vehicle {
	private final int loadCapacity;
	
	public Truck(int loadCapacity, String registrationNumber) {
		super(registrationNumber);
		this.loadCapacity = loadCapacity;
	}
	@Overried
	public int getRegistrationNumber() {
        return 18;
  }
}

Pattern Matching for switch

switch 패턴 매칭 표현 식은 값의 반환이 가능해져, 람다 스타일 구문을 사용할 수 있다.

java17에서는 swtich selector 표현에서 어떠한 타입이든 검사할 수 있도록 개선되었다.

public double checkType(Object o) {
	double result;
	if(o instanceof Integer){
		result = ((Integer)o).doubleValue();
	} else if (o instanceof Float) {
			result =((Float)o).doubleValue();
	} else {
		result = 0d;
	}
	return result;
}
public double checkType(Object o) {
	return switch(o) {
		case Integer i -> i.doubleValue();
		case Float f -> f.doubleValue();
		default -> 0d;
	};
}

텍스트 블록 기능

여러줄 String 문자열 작성 시 사용가능

String htmltxt = """<html>

                <body>
                    <span>example text</span>
                </body>
            </html>""";

완전탐색

  • 모든 경우의 수를 확인하는 방식
  • 문제에서 완전탐색 대상이 어떤 건지 가려야한다.
    • 예) 세 명이서 가위바위보를 하고 이긴사람이 1~9까지 카드가 들어있는 주머니에서 카드를 뽑아 나온 숫자를 곱해 몇 번 안에 원하는 숫자를 만들 수 있는지
      • 가위바위보가 가짓수를 구하는게 아니라 카드뽑기가 가짓수를 구하는 항목이다.
        • 모든 경우를 만든 뒤 , 문제에 있는 조건을 적용한다.(max, min)
      • 입력의 크기가 매우 작고 최적해를 구하라는 언급이 있으면 완전탐색 의심
    • 조합과 순열
      • 조합
        • 순서가 달라도 데이터가 같으면 동일한 취급
        • 가짓수를뽑는데 집중
      • 순열
        • 여러 데이터에서 몇 가지를 뽑아 경우의 수를 만드는것
        • 선택되는 원소의 순서가 매우 중요할 경우

[참고]

https://www.ibm.com/docs/en/informix-servers/14.10?topic=relationships-resolve-mn

https://www.oracle.com/java/technologies/javase/17-relnote-issues.html

https://www.baeldung.com/java-switch-pattern-matching

https://techblog.gccompany.co.kr/우리팀이-jdk-17을-도입한-이유-ced2b754cd7

0개의 댓글