일단 씻고 나가자
23.04.10 본문
2023. 04. 10 월요일
- [Java] 정규식의 사용 함수, 사용 후 return의 주의점, 이스케이프 주의점?
: 정규식은 replaceAll로 사용할 수 있다. (replace는 정규식 이용이 불가하다.)
정규식은 메서드 체이닝 방식으로 사용하므로, 항상 return된 값으로 최신화를 해주어야 함.
이스케이프 (\) 문자는 특수 문자를 구별할 때는 두 개를 쓰며, 하나는 특정 이스케이프 시퀀스 (\t 등)에만 사용할 수 있으므로 일반 문자 앞에 쓰게 되면 에러를 발생시킨다.
- [Java] synchronized 블록과 wait, notify 함수의 관계?
: synchronized 블록 내부 (소괄호)에 선언된 thread 객체는, 현재 실행되고 있는 thread가 해당 객체에 대한 모니터링 락을 가지고 있었다면 잠시 놓고 대기하게 된다.
그렇다면 해당 객체에 접근하고 싶었던 다른 thread가 락을 가지고 할 일을 수행한 후,
notify()로 작업이 끝났음을 알린다.
notify()는 waiting pool에 있는 thread들 중 하나를 랜덤하게 잠에서 깨우며,
notifyAll()은 모두 깨운 후 공평하게 랜덤하게 하나를 수행할 수 있게 해준다.
(특정 thread만 오래 잠들어 있는 상황을 방지)
- [Regex] 모든 문자를 나타내는 기호?
: ‘.’ 기호는 모든 문자를 해당하는 와일드카드이다.
단 .을 여러 개 찍으면 해당 개수 만큼에 해당하는 문자만 선택된다.
- [Regex] 대괄호의 기능?
: 대괄호 내부에 있는 문자들을 하나의 문자로 보고 매치한다.
즉, [ABC] 라면 ABC 중 하나와 문자가 같으면 매치 된다.
해당 기능을 쉽게 하도록 range 기능([a-z])을 제공하고 있으며,
^ 기호가 대괄호 내부에 존재하면 not의 의미로 대괄호 내부의 문자들을 제외한 문자들과 매치한다.
- [Git] 원격 저장소란?
: Remote Repository. Local Repository(지역 저장소)와 대비되는 의미이다.
작업한 내용을 인터넷에 저장하여 백업하고, 협업할 수 있는 저장소이다.
- [Spring] OCP란?
: Open Closed Principle. 기존 클래스는 수정하지 말고, 신규 클래스를 만들어서 기능을 추가하라. 즉, 요구 사항이 추가되었을 때 기존 클래스를 if-else로 분기하여 기능을 추가하지 말고 해당 클래스를 상속받아 새로운 클래스에 기능을 추가하라는 의미이다.
코드의 개수는 늘어나지만, 매번 구현체를 새로 구현하면서 이슈들에 대해 먼저 알아차릴 수 있다.
- 컴파일러와 인터프리터 언어의 차이?
: Java나 C언어는 고급 언어로, 작성한 코드가 한 번 전부 컴파일이 된 후에야 기계어로 변환이 되지만 인터프리터 언어는 한 줄 한 줄 읽어가면서 바로 컴파일이 되기 때문에 시간상으로 빠를 수밖에 없다.
- [Effective Java] 메서드 명명 규칙에서 from과 of의 차이? 쓰이는 곳? 장점?
: 보통 static 팩토리 메서드에서 사용하며,
from은 return 받는 객체의 재료가 무엇인지 명확지 않을 때, of는 명확할 때 쓰인다.
즉 음식을 return 한다면 Food.from(param); 이거나
Food.ofMilkAndBread(Milk, Bread); 로 명명. // 함수 명의 순서대로 파라미터를 넣도록 유도할 수도 있다.
class 생성자와 대립 관계인데, 생성자 방식은 웹에서 entity를 받아 객체를 만들 때 해당 객체가 필요한 시점마다 매번 객체를 만들고 해당 객체의 필드를 초기화해주는 작업으로 무의미한 코드가 늘어나지만, 해당 방식으로는 엔티티를 매개변수로 받아 하나의 static 메서드에서 처리해주고 객체를 return 받는 방식으로 깔끔하게 처리할 수 있으므로 편리하다.
(from은 하나의 엔티티를 통으로 받고, of는 그런 객체를 특정 기준에 의해 분류하거나 속성을 추가할 때 이용한다.)
이는 response에서도 유용한데, 코드의 중복을 줄임은 물론 필요 없는 필드에 대해서 처리할 필요 없이 필요한 변수만 초기화하여 객체를 만들 수 있기 때문에 편리하다.