만족은 하되 안주하지는 말자

기록해야 기억한다

프로그래밍/JAVA 20

[Spring] @Sql 어노테이션을 test class에서 1번만 실행시키려면?

문제 @Sql(value = "/db/cossc/test.sql") @SpringBootTest @ActiveProfiles("test") class QuizServiceTest { @Autowired private QuizRepository quizRepository; @Test public void test() { // ...테스트 코드 } @Test public void test2() { // ...테스트 코드 } @Test public void test3() { // ...테스트 코드 } } // 나의 경우엔 quiz test를 위해선 의존관계가 있는 tag entity를 초기화해줘야했다 // test.sql INSERT INTO cossc.TAG (tag_id, created_date, upda..

[JAVA] 10진수 n진수 변환 (n진법 변환)

알고리즘 문제에서 자주 사용되는, 10진수 -> n진수 변환 방법에 대해 알아보자. Integer.toString 과 toBinaryString 메서드 2진수로 변환 final String binNum = Integer.toBinaryString(16); System.out.println("binNum = " + binNum); final String formattedNumber = String.format("%8s", binNum).replace(" ", "0"); System.out.println("formattedNumber = " + formattedNumber); 2진수는 toBinaryString(int number); 메서드를 사용하면 문자열로 변환해 보여준다. 만약, 앞에 0을 원하는만큼 ..

[java] Date, LocalDateTime 사용법 간단 정리

Java 8+ 에선 Date 클래스의 단점을 보완한 LocalDateTime 클래스가 도입되었다. 그러나 많은 레퍼런스에선 아직 Date 클래스를 활용한 코드들이 많이 보인다. 프로그래머스라던지, 프로그래머스라던지... 그래서 각 클래스들로 원하는 동작을 구현할 수 있도록 각각 정리해봤다. 현재 시간 구하기 // LocalDateTime final LocalDateTime now = LocalDateTime.now(); System.out.println("now = " + now); // Date final Date now2 = new Date(); System.out.println("date = " + now2); 기본적으로 LocalDateTime 은 static method 들로 처리를 한다. Da..

다형성: 우리는 왜 List list = new ArrayList(); 라고 쓸까?

제목의 질문은 아래로도 대치 가능합니다. 왜 우리는 인스턴스 타입을 클래스 대신 인터페이스로 초기화할까? 우리는 아래처럼 인스턴스를 생성 및 초기화해서는 안됩니다. ArrayList list = new ArrayList(); List list = new ArrayList(); 우리는 위처럼 List 인터페이스를 사용해야 합니다. 인터페이스를 구체클래스의 위에 타입으로 덧씌우는 것은 캡슐화와 낮은 결합도(loose coupling)의 핵심입니다. 나중에는 테스트코드를 작성하기도 쉬워지고 나중에 구현에 변경사항이 생겨도 변화에 쉽게 대응할 수 있습니다. 만약 나중에, 기획자가 요구사항을 바꿔서 ArrayList 가 아니라 Stack 의 기능으로 바꿔야 한다면 해줘야 하는 건 그냥 ArrayList 를 St..

List 2차원 배열 만들기 (Array of ArrayList, 2d array with ArrayList)

코테를 풀다보면 당연히 2차원 배열 형태의 저장공간이 필요할 때가 있고 (내가 그랬고) 이 때, 배열의 각 인덱스 공간이 동적인 사이즈를 가진 배열을 원할 때가 있을 수 있다. 이 때, 배열의 각 행은 고정, 열크기가 가변적인 Array of List 형태를 만들면 해결될 거다. 만약 여러 개의 줄에 서 있는 사람들의 키를 저장하고 출력하는 프로그램이 있다고 하면, 줄의 길이는 정해져 있지 않으므로 정적배열이 아닌 가변길이의 리스트로 진행해야 할 것이다. import java.util.*; public class Arraylist { public static void main(String[] args) { int n = 5; // 변수 정의 선언 ArrayList[] al = new ArrayList[n..

[Java] 정수 콤마 넣기 (천원 단위 변환, 금액 변환)

개발할 때, 금액을 보기 좋게 표현하려면 10000원 -> 10,000원으로 천원 단위마다 , (comma) 를 추가해줘야 할 때가 있다. 방법1 DecimalFormat 을 이용한다 DecimalFormat 은 NumberFormat의 서브클래스다. 십진법 숫자를 다양한 특징을 가진 숫자로 변환해주는 기능을 가지고 있다. 통화($100), 퍼센트(12%), 고정소수점 등 다양하게 숫자를 표현할 수 있다. 일반적으로 생성자를 호출하지 않고 factory method를 활용하는 것이 일반적이다. @Test void format_test() { int price = 125000; final String format = DecimalFormat.getInstance().format(price); Asserti..

[Java] 문자열 붙이기에 반드시 StringBuilder 를 안해도 된다

서론 개발을 하다가 멘토님께 알게 된 사실을 정리한다. 사실 나는 문자열 붙이기를 할 때, '+' 를 활용하면 메모리 낭비가 너무 커질 수 있어 지양해야한다는 생각을 가지고 코드를 작성해왔다. 이 주제는 상당히 오래전부터 자바를 공부하는 우리 컴공생들에게 (면접질문 등으로) 자주 논의되던 이야기였다. 문자열 붙이기에 '+' 를 이용하지말아야한다는 근거 String 객체는 불변 객체이다. 즉 한번 객체가 생성되면 그 객체 내용을 변경하는건 불가능하다. 그래서 우리가 한 문자열을 다른 문자열과 합치게 되면 기존 문자열의 내용이 변하는게 아니라 새로운 문자열이 생성된다. 그리고 이제 참조되지않는 (아래 그림의 경우 "Hello") 문자열은 더이상 어느 코드에서도 참조되지않으므로 GC(Garbage Collec..