일단 씻고 나가자
23.03.28 본문
2023. 03. 28 화요일
- 문자열 A를 오른쪽으로 한 칸씩 밀어 문자열 B를 만들 때, 몇 번 밀어야 하는지 아이디어?
: B.repeat(2).indexOf(A);
대상이 B를 만드는 것이고, 오른쪽으로 민다는 건 어쨌든 문자열의 반복으로 나타날 수 있음.
- [Java] Map의 key 존재 여부에 따라 처리를 달리하는 함수?
: 제너릭타입 = map.getOrDefault(key, defaultNum);
map에 첫 번째 인자인 key가 있다면 해당 매핑된 값을,
key가 존재하지 않는다면 해당 타입에 맞는 두 번째 인자인 값을 반환함.
이를 이용하여, !map.containsKey 대신 값을 받아 put 할 수 있음.
- [Java] 정규식서 주의해야 할 특수 문자? 해결 방법?
: +, *, ^로 나눌 때는 java.util.regex.PatternSyntaxException이 발생하며, 이유는 해당 기호는 특별한 의미로 쓰이기 때문이다.
따라서 해당 문자들 앞에 \\+ 같이 \\를 붙여주면 된다.
- [Spring] JpaRepository란? 기능?
: JpaRepository 인터페이스를 extends 하면, 자동으로 Spring Data Jpa가 프록시란 기술로 interface 구현체를 만들고 자동으로 bean에 등록함. 사용자는 인젝션만 받으면 된다.
기본적인 CRUD와 단순 조회, DB PK 검사 등의 findById, save 등등 주요 메서드를 모두 자동으로 만들어준다!
이런 공통적인 기능의 제공은 물론이고, 특정 서비스마다 다른 작업 (예를 들면 이름으로 찾는다든지)도 메서드의 이름과 매개변수를 만들어주는 것으로 알아서 구현해준다!
예를 들어 findByName(String name) 하면 JPQL로 알아서 쿼리를 짜고 Name을 찾아서 구현. 기본적인 인터페이스의 함수 이름만 지킨다면 알아서 다 해준다. 이를 리플랙션 기술이라 한다.
- [Spring] JDBC, JdbcTemplates, JPA, Spring Data JPA의 발전 과정 간략히?
: JDBC – 개별 쿼리와 자바 코드만해도 엄청난 길이.
JdbcTemplates – 반복 코드가 줄어들지만, 쿼리는 직접 작성.
JPA – 웬만한 함수를 제공해주고, 상세한 내용은 JPQL로 작성.
Spring Data JPA – 인터페이스만으로 개발.
- [Git] stash란?
: commit을 하지 않으면 checkout 할 수 없는 git의 특성상, 특정 branch에서 작업 중 다른 branch로 옮겨서 작업할 때 문제가 생김. 그럴 때 잠시 작업 중 파일을 숨기는 기능.
- [Git] stash의 구체적인 예시와 사용 방법? 키워드? 삭제 키워드와 특징?
: 특정 branch에서 master에도 존재하는 파일을 수정 중 master로 다시 checkout 할 경우, 아직 commit을 하지 않았기 때문에 master에서 해당 파일을 접근할 때에도 문제가 생김.
commit 하지 않은 작업 중인 파일이 있는 branch에서
git stash 혹은 git stash save를 입력하면
라 뜨는데, WIP 는 Working In Process로 해석해보면
‘Working In Process(작업 중인) directory와 index(변경사항들)가 저장되었다’라는 뜻.
그 후 git status나 수정 중인 해당 파일의 내용을 보면 commit 할 내용이 없으며, 파일 내용이 수정 전 그대로인 것을 볼 수 있다. (수정 내용이 아예 적용되지 않음.)
다시 해당 파일을 살려내려면 git stash apply 키워드를 입력하면 파일이 modified로 다시 살아나고, 수정 중이던 내용이 다시 불러내진 걸 볼 수 있다.
이런 stash 로그는 git stash list 키워드에서 확인할 수 있으며,
이런 stash의 내용과 로그는 git reset —hard를 하더라도 apply로 다시 복원이 가능하다.
stash는 지우는 방법이 따로 존재하며, 이는 git stash drop으로 가장 최신의 stash를 삭제하며 다음 stash에 접근할 수 있다. (stack의 pop)
git stash apply; git stash drop; 으로 한 줄에 처리할 수 있지만 번거로우므로
git stash pop 키워드를 사용하면 apply + drop 두 기능이 동시에 수행된다.
추가적으로 stash 역시 한 번이라도 add와 commit 되어 버전 관리가 이루어진 파일만 해당된다. 그러지 않은 파일은 stash 할 수 없다.
- [Java] StringBuffer의 레퍼런스 특성? 메서드 체이닝?
: StringBuffer의 많은 함수들은 적용 이후에 바뀌어진 자기 자신(this)를 반환한다.
메서드 체이닝(Method Chaining)이란, 자기 자신을 리턴하여 계속해서 자신의 메소드를 호출하는 방식이다. ( ex. new StringBuffer().append(“”).append(“”).... )
예를 들어, StringBuffer sb1 = sb2.append(“hello”);의 경우 sb2의 append가 hello를 적용한 이후 sb2 자신을 return하기 때문에 sb1도 hello를 가지고 있는 sb2를 가리키게 된다. 즉 두 개의 레퍼런스가 하나의 객체를 가리키는 셈.
- [Java] String의 + 연산 시 발생하는 과정? SringBuffer와의 관계?
: + 연산마다 내부적으로 new StringBuffer() 객체를 만들어서 해당 문자열들을 append 한다. new가 반복될수록 메모리 저하와 속도 저하가 생기므로, 차라리 하나의 객체로 append 하는 것이 성능상의 이점을 볼 수 있다.