Java & Kotlin
-
(Java)파사드 디자인 패턴 - Facade Design PatternJava & Kotlin 2021. 3. 28. 15:53
1. 서론 자바를 이용해 개발할 때 Slf4j를 구현한 Log4j2를 많이 사용합니다. 이때 Slf4j 공식 문서를 보면, 'Facade Pattern'을 이용했다고 합니다. 그래서 Log4j2가 이를 구현해 사용한다고 하는데요. 그래서 Facade Pattern은 뭘까요? 2. 영어사전의 정의 영어는 영어로서 먼저 받아드려야 한다고 생각합니다. 해당 단어의 사전적 의미를 먼저 파악 후 프로그래밍적 측면으로 바라보면 좀 더 쉽다고 생각합니다. 빌딩의 표면, 특히 거리 혹은 열린 공간을 바라보고 있는 주요한 정면이 덜 좋거나 칭찬할만한 현실을 감추는데 사용하는 바깥을 바라보는 표면 사전에는 위와 같이 정의되어 있습니다. Origin을 보게 되면 French의 face라는 단어에서 왔다는 것을 알 수 있습니..
-
(Java)Arrays.deepToString - 2차원 배열 출력Java & Kotlin 2021. 3. 11. 21:38
오늘은 2차원 배열의 출력에 대해서 알아보려고 합니다. 사실 1차원 배열은 아주 간단합니다. 위의 코드에서처럼 컬렉션 프레임워크의 Arrays 클래스를 이용해서 toString 메소드를 사용하면 됩니다. Arrays 클래스의 사용은 익숙하지 않은 경우가 있더라도, toString 메소드는 무엇인가 출력할 때 많이 사용하기 때문에 익숙할 것입니다. 하지만 'int[][] arr'와 같이 2차원 배열을 출력하게 되면 값이 출력되는 것이 아니라, 각 객체의 주소가 나오게 됩니다. 실제 메모리의 주소는 아니고, IDE에서 임의로 붙이는 번호지 않나 추측합니다. 그렇다면 2차원 배열의 값이 잘 들어갔는지 확인하려면 어떻게 해야 할까요? Arrays.deepToString 간단하게 deepToString 메소드를 ..
-
(Java)Comparator 인터페이스 / compare 메소드Java & Kotlin 2021. 3. 4. 09:33
1. 서론 백준 문제 1931 문제를 풀던 중 2차원 배열의 순서를 정렬해야 했습니다. 즉 time[i][1] vs time[i+1][1]을 비교해야 했습니다. 문제는 단순히 Arrays.sort()를 하게 되면 기본적인 오름차순 정렬 밖에 되지 않습니다. i의 순서가 아닌, 2차원 배열의 두 번째 요소를 작은 순서대로 정렬을 하려면 어떻게 해야 할까요? 2. Comparator 인터페이스 / ompare 메서드 Comparator 인터페이스는 compare(T o1, T o2) 메서드를 구현하고 있습니다. 특징은 compare 메서드를 원하는 대로 커스텀해서 비교를 할 수 있습니다. 어떤 문자 혹은 숫자를 단순 오름차순이 아닌, 필요에 따라 비교하기에 좋습니다. 아래는 return 값입니다. if (o..
-
(Java)ArrayList vs LinkedList 시간 복잡도Java & Kotlin 2021. 2. 22. 10:49
1) 서론 Selenium과 JSoup을 이용해서 크롤링을 하다 보면 데이터를 가지고 오고, 추가하는 작업을 많이 하게 됩니다. 그럴 때 반복적으로 사용하게 되는 것이 List 인터페이스와 For loop입니다. 하지만 List 인터페이스를 사용할 때는 습관적으로 ArrayList 클래스만 사용하고 있었습니다. 하지만 List 인터페이스를 구현한 것은 LinkiedList 클래스도 추가로 있습니다. Vector도 있긴 하지만, ArrayList와 동일한 동작을 하며 자바 1.8 이상부터는 사용하지 않는 것으로 알고 있습니다. 그래서 LinkedList와 ArrayList의 성능상 차이점은 뭐가 있을까 고민을 해봤습니다. 2) ArrayList vs LinkedList 기본적인 차이점 두 개의 가장 큰 차..
-
(Java)Scanner vs BufferedReaderJava & Kotlin 2021. 2. 4. 16:38
오늘은 Scanner과 BufferedReader에 대해서 작성하려고 합니다. 사용자로부터 콘솔에 어떤 값을 입력 받은 후 출력하는 대표적인 클래스들 입니다. 하지만 이 두개가 다르다는 것을 알고 계셨나요? 알고리즘 문제를 풀다 보면 Scanner 클래스를 이용해서 단순히 사용자로부터 입력 받은 값을 출력하면 될 것 같은데, 시간초과로 문제가 틀리는 경우가 있습니다. 이런 경우에는 BufferedReader라는 클래스가 있다는 것조차 모를 때는 정말 해결하기 어렵습니다. 왜냐하면 Scanner클래스를 사용했을 때의 속도에 대해서는 고려하지 않았기 때문입니다. Scanner vs BufferedReader Java 11 API의 설명을 참고합니다. Scanner는 "간단하게 기본형과 String 타입을 정..
-
(Java)Math.max vs 삼항연산자Java & Kotlin 2021. 1. 30. 16:54
숫자 비교의 여러 가지 방식 세 가지 모두 결과는 같습니다. 정수형 값 두 개를 입력 후 비교합니다. 1. Math.max 여러 가지 수학 관련 메서드를 사용할 수 있는 Math 클래스입니다. 아마도 자바를 처음 배우게 된다면 'Math.random()'과 같은 코드를 많이 사용했을 텐데요. 'Math.max'는 이름만 봐도 알겠지만, 두 개의 숫자를 비교해서 더 큰 숫자를 나타내는 겁니다. API를 찾아보면 평균, 최솟값 등 더 많은 메서드가 있습니다. 또한 int, float형 등등 다양한 형식도 지원합니다. 개인적으로는 세 가지 방식의 숫자 비교 중 가장 직관적인 방식이라고 생각합니다. 2. 삼항연산자 삼항연산자도 간단합니다. (a>b)의 조건이 참이라면 첫 번째, 거짓이라면 두 번째 조건을 출력하..
-
[Java]2차원 배열이란?Java & Kotlin 2020. 9. 2. 20:39
1. 2차원 배열 int[] array = new int[2]; 위에서 보는 코드는 그냥 배열입니다. 2개의 값이 들어갈 수 있는 평범한 배열을 만들었는데요. int[][] array2 = new int[2][3]; 위의 코드를 봅니다. 뭔가 이상합니다. 괄호가 하나가 더 생겼습니다. 대체 어떻게 된 일일까요? 위의 그림을 봅니다. 총 6개의 값을 넣을 수 있는 공간이 생겼습니다. 2차원 배열입니다. 배열의 배열입니다. 즉 배열이 합쳐져서, 다시 배열을 이루는 것입니다. 정확히는 int 정수 3개를 넣을 수 있는, 배열 2개를 만드는 것 입니다. 즉 가로 1 = 배열 1개라고 생각하시면 됩니다. 좀 더 쉽게 생각을 해보자면, 엑셀처럼 순서대로 [2][3]을 가로축, 세로축이라고 생각하시면 됩니다. 가로(..
-
Firefox Java Coding StyleJava & Kotlin 2020. 6. 13. 17:38
안녕하세요 오늘은 파이어폭스(Firefox) 회사인 모질라 재단이 정의한 자바 코딩 스타일(Java Coding Style)에 대해서 공부해보려고 하는데요. "깔끔한 코드"란 과연 무엇일까라는 고민을 한 적이 있습니다. 흔히 말하는 "있을 곳에 있는 코드", "누구나 읽었을 때 어색함이 없는 가독성" 일 것 같습니다. 그래서 영향력 있는 회사들은 어떻게 작성하는 코드가 읽기 쉽고, 깔끔하다고 정의하고 있을까 궁금해서 시작했습니다. 사실 코딩 스타일은 각 회사별로 다릅니다. 왜냐하면 사람마다 코딩하는 스타일도 다르고, "좋은 코드"에 대한 의견도 다릅니다. 그렇게 수많은 다른 사람들이 모인 회사에서, 각자 원하는 대로 코드를 치면 프로그램 전체의 코드 스타일이 재각각이 될 것입니다. 책 한 권을 만드는데,..