일단 씻고 나가자
23.03.22 본문
2023. 03. 22 수요일
- [Java] 문자열을 거꾸로 뒤집는 법?
: new StringBuffer(string).reverse().toString;
추가로 StringBuilder와 StringBuffer는 서로 생성자로 감싸진다.
StringBuffer에는 append() 기능도 있다.
- [Java] 이진수 <-> 십진수 서로 바꾸는 함수?
: Integer.toBinaryString(int);
Integer.parseInt(“1000”, 2);
- [Java] 스트림에서 특정 A 클래스의 a 메소드를 사용하는 문자?
: .map( A :: a )
- [Java] Integer ArrayList를 스트림을 사용하여 int 배열로 바꾸는 방법?
: new ArrayList<Integer>(Arrays.toList(Integer[])).stream().mapToInt(Integer::intValue).toArray();
- [Java] NumberFormatException이 발생하는 이유?
: 대표적으로 숫자에 해당하지 않은 문자열을 parse하려고 했기 때문.
- [Java] 정규식에서 여러 가지 문자를 구분자로 넣는 방법과, 마침표, 공백을 넣는 방법?
: 예를 들어 !?; 세 가지를 구분자로 두고 싶다면 .split(“[! | ? | ;]”) 로 구분하면 된다.
구분자로 | 가 오면 정규식은 그 자체를 구분자로 생각하지 않고 or로 해석한다.
마침표, 공백의 경우 [.] [ ] 혹은 \\. 로 표현한다.
- [Java] String.split(“”)에서 구분자가 연속할 시 빈 배열을 없애는 방법?
: split은 구분자가 연속되면 빈 공간도 배열에 함께 넣는다. (이유와 해결법은 나중에 찾아보자..) java.util의 StringTokenizer은 이런 빈 공간을 허용하지 않고 데이터가 있는 것만 담는다.
- [Java] Date 클래스의 기본적인 객체 생성법과, format을 활용하여 현재 시간을 표현? 밀리초를 나타내는 함수?
: Date date = new Date();
자바는 util에 SimpleDateFormat 클래스를 지원한다.(java.text./)
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy.MM.dd hh:mm:ss a zzz”);
+ Month의 M은 minute의 m과 차이를 두기 위해 대, 소문자를 구분한다.
+ a는 am/pm, zzz는 TimeZone. 국가별 시간. 우리나라의 경우 KST
sdf.format(date)를 통하여 현재 시간을 알 수 있다.
long milli = System.currentTimeMillis();를 통해 현재 밀리초를 가져올 수도 있다.
- [Java] Calendar 추상 클래스는 왜 객체 생성을 Calendar.getInstance() 방식으로 하는가?
: Calendar의 객체는 Calendar 자체의 객체가 아닌, Calendar을 상속받은 Gregorian Calendar에 의존한다. 의도적으로 객체 생성의 방식을 숨기는 것인데, 이유는 현재는 그레고리안이 표준 달력이지만 추후 새로운 형식의 표준 달력이 나왔을 때 버전 업을 통해 해당 표준 달력의 다른 인스턴스를 반환하기 쉽게 하기 위함이다.
- [Java] Calendar 객체를 사용하는 주요 함수 2가지와, 주의해야 할 점. 그 이유는?
: Calendar 함수는 조금 특이하게 해당하는 함수를 꺼내 오는 것이 아닌 상수를 통해 return 받는다. 주요 함수로는 .get()이 있으며, Calendar.getInstance()가 호출된 시점으로
cal.get(Calendar.YEAR/MONTH/HOUR/DATE)등을 얻을 수 있다.
이때 주의할 점은 MONTH는 1월을 0부터 시작하여 +1을 해주어야 올바른 월을 알 수 있다.
Calendar은 .add(Calendar.MONTH, 5) 등으로 첫 매개변수에 두 번째 매개 변수를 더하는 날짜 및 시간 계산도 가능하다.
- 조합이란? 중복조합이란?
: 조합 // 순서 상관없이 n개에서 r개 선택. nCr = n!/(n-r)!r!
중복조합 // 순서 상관없이 중복해서 r개 선택. nHr = n+r-1Cr
- 재귀함수의 논리?
: 1~k의 범위라 가정하자. 매개변수는 k부터 1까지 점점 하나씩 줄며 들어가고, return 부에는 무조건 줄어든 k를 매개변수로 넣은 재귀 호출을 해야 한다.
함수의 초반부에는 k가 줄어들다가 한계까지 왔을 때 초깃값을 return 해주어야 한다.
재귀함수는 점화식과 밀접하다. k의 한계에서 return해주는 값은 점화식의 초깃값이고, 따라서 k의 한계 설정은 점화식의 초깃값의 범위이다. (초깃값이 1이라면 단순히 k==1일 때 수행하면 되지만, 초깃값이 a1 a2 두 가지라면 k<3 이 될 것이다.)
return부에는 현재 구현하고자 하는 점화식의 일반항을 적어주면 된다.(3인 등비수열이라면 3*함수(k-1) 하면 되고, 피보나치 수열이라면 함수(k-1) + 함수(k-2) 하면 된다.)
- JDBC의 역할?
: 자바가 DB랑 연동할 때 꼭 필요한 드라이버. gradle에 추가한다.
- 순수 JDBC로 데이터 베이스 연결 시의 흐름?
: properties와 gradle에 해당 드라이버 정보를 입력해 놓고,
데이터베이스를 연결 용도의 클래스를 만들어 DataSource 클래스로 객체를 생성하면
스프링은 Datasource(접속 정보)를 주입 받고, datasource.getConnection()을 통해 실제 쿼리를 날려 데이터베이스와 소통하는 소켓을 받는다.
Connection 객체를 getConnection()과 연결하고,
다시 PreparedStatement 객체인 connection.prepareStatement의 매개변수로 sql을 문자열을 넣은 후 pstmt.executeUpdate();를 통해 최종적인 마무리.
- try-with-resources란?
: 네트워크 연결이나 파일 스트림 같은, 연결 후에 꼭 자원을 끊어주어야 하는 객체의 경우
매번 try-catch에서 close를 해주는 건 비효율적이다. (close == release)
t-w-r은 try () {..} 방식이고, try의 옆 소괄호에 open 되는 객체들의 선언과 생성을 해준다.
이는 try문을 벗어나면 자동으로 close 되는데, AutoCloseable을 구현한 객체에 한하여 해당 된다.
- 스프링에서, 객체 지향의 장점은?
: 기존 데이터베이스에서 다른 데이터베이스를 연결해도 원래 동작하던 코드는 하나도 손대지 않고 새로운 데이터베이스를 연결하는 클래스만 만들어 그 객체로만 바꾸어 준다면 쉽게 바꿀 수 있다. 이를 SOLID의 OCP라고 한다.
즉, 하나의 인터페이스로 전혀 다른 구현체를 생성하면서도 기존 코드의 변경이 없음.
- branch의 개념은? 장점?
: 버전이 바뀌어가는 줄기의 과정. 하나의 작업물을 클라이언트용, 개발용 등등 여러 버전으로 나누는 과정을 branch라 한다. 나무의 가지라는 뜻으로, 용도가 달라질 때는 branch 개수가 하나 늘어난다. 이미 하나의 파일을 여러번의 수정을 거치고 있다면 그건 이미 하나의 branch를 사용하고 있다는 뜻이다. git은 이전 VCS에서의 무겁고 쓸만하지 않은 해당 기능을 획기적으로 개선시켰으며, 내부적으로 모든 시스템을 branch에 의거하여 사용하고 있다.