멀티프로세스에서는 각 프로세스 마다 고유한 T메모리 구조(static,stack,heap을 편의상 지칭하는 이름)가 있어 서로 참조 불가하지만 메모리 사용량은 크다.
멀티 스레드는 하나의 T메모리 안에서 스택 영역만 분할한 것이기 때문에 하나의 스레드에서 다른 스레드의 스택 영역에 접근 불가지만, static & heap영역은 접근이 가능하다.
❓서블릿은 request마다 프로세스가 아닌 스레드를 생성한다. 어떠한 이유일까?
요청 마다 프로세스가 생성되면 각자 독립된 T메모리 영역이 생성되어 메모리 사용량이 크다. 전역변수, static 변수등의 공유도 불가하다. 이러한 이유로 static & heap영역을 공유하여 사용하고 스레드가 프로세스의 자원을 공유하여 프로세스 대비 적은 메모리를 사용하여 프로그래밍 할 수 있기때문
세상에 존재하는 유일무이한 객체를 특성(속성 + 기능)에 따라 분류하여 객체를 통칭할 수 있는 집합적 개념 → 클래스(분류)
클래스는 분류에 대한 개념
클래스를 이용해 객체를 만들었다는것을 표현할때는 인스턴스라고 표현한다.
사람 김연아 = new 사람();
펭귄 뽀로로 = new 펭귄();
정적 속성은 UML표기에서 밑줄을 사용하여 표시한다.
| Mouse | |
|---|---|
| name | |
| age | |
| countOfTail | 1 |
| sing() |
정적 속성인 경우 T메모리 static 영역에 클래스가 배치될 때 클래스 내부에 메모리 공간이 확보되는것을 보여 준다.
객체 속성은 힙 영역에 객체가 생성되면 바로 그때 각 객체안에 멤버 속성을 위한 메모리 공간이 할당된다.
추상화 = 모델링
추상화란 구체적인 것을 분해해서 관심영역(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>""";
완전탐색
[참고]
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