일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- DFS
- DP
- 알고리즘기본개념
- 알고리즘
- 코딩테스트실력진단
- SWEA
- 완탐
- JPA
- 코테
- BFS
- 백준
- Union Find
- 코드트리
- 부분수열의합2
- 트러블슈팅
- 그리디
- 코딩테스트
- 싸피
- 유니온파인드
- database
- 다시보기
- 기본유형
- Java
- Spring
- 그래프
- SSAFY
- JUnit
- 완전탐색
- 다익스트라
- 자바
- Today
- Total
목록Java (17)
HwangHub
What is Garbage Collection ? 자바를 공부하다보면 자주 마주하게 되는 "가비지 컬렉션"이라는 말. 이번 기회에 한번 제대로 알아보자. "가비지 컬렉션"이란, 말 그대로 쓰레기를 모아서 버려주는 것을 의미한다. 마치내가 방 안에서 살다 보면 처음엔 잘 쓰던 물건이더라도, 어느샌가 손도 대지 않는 물건이 존재하듯이, 프로그램도 계속 작업을 수행하다보면 끊임없이 필요 없는 데이터들이 메모리 위에 쌓여나가게 되는 것이 일반적이다. 고전적인 프로그래밍 랭귀지인 C나 C++의 경우에는 이렇게 메모리를 차지하는 데이터에 대하여 수동으로 free를 해줘야 한다. 이를 처리하지 않으면, 필요하지도 않은 데이터가 메모리에 지속적으로 공간을 차지하여 이를 활용하지 못한다 해서 "메모리 누수(memory..
jdbc 프로젝트를 진행하다가 위와 같은 이슈를 마주했다. 문제 원인을 알아보니 문제의 코드는 아래 부분이였다. Statement stmt = conn.createStatement(); for (String ssn : ssnList) { sb = new StringBuilder(); String sql = sb.append(baseDeleteClause).append("ssn = ").append(ssn).append(";").toString(); stmt.executeQuery(sql); } 위 코드 중 .executeQuery()메서드가 문제다. 한번 이번 기회에 살짝 알아보자. 알아야 할 것 jdbc에서 지원하는 실행 메서드는 execute() , executeQuery() , executeUpda..
이펙티브 자바에서 소개된 객체 생성 방법론인 Builder Pattern을 쉽게 적용할 수 있도록 Lombok에서는 @Builder라는 어노테이션을 제공해 줍니다. 이를 개인적으로는 클래스 레벨에서 많이 사용해오곤 헀는데, 롬복 공식 문서에 따르면 @Builder 어노테이션은 생성자 레벨에서 사용하는 것을 권장한다고 합니다. 출처: https://projectlombok.org/features/Builder @Builder projectlombok.org 클래스 레벨과 생성자 레벨에는 한 가지 차이점이 있는데, 클래스 레벨에서는 가능한 모든 필드에 대하여 빌더 메서드를 생성했다면, 생성자 레벨에서는 생성자의 파라미터 필드에 대해서만 빌더 메서드를 생성한다는 점입니다. 출처: https://sudo-min..
출처: https://cerulean85.tistory.com/149 객체와 인스턴스의 차이 * 자의적인 해석이므로 논란의 여지가 있음 객체와 인스턴스의 차이를 알아보니 블로그마다 말이 다르다. 어떤 블로거는 인스턴스는 객체와 같지만, 관계적인 측면에서 이야기할 때 객체 대신 cerulean85.tistory.com 객체(Object)는 소프트웨어 세계에 구현할 대상이고, 이를 구현하기 위한 설계도가 클래스(Class)이며, 이 설계도에 따라 소프트웨어 세계에 구현된 실체가 인스턴스(Instance)이다. 객체(Object)는 현실의 대상(Object)과 비슷하여, 상태나 행동 등을 가지지만, 소프트웨어 관점에서는 그저 콘셉(concept), 즉 사유의 결과일 뿐이다. 소프트웨어에서 객체를 구현하기 위해..
객체는 여러 필드를 가지고 있을텐데, 어떤 특정 필드를 기준으로 오름차순 정렬을 하기 위해서는 여러가지 방법이 존재합니다. @Override compareTo() 가장 원시적인 방법(지금은 잘 사용하지 않는 방법)은 클래스에 Comparable 인터페이스를 구현한다고 한 뒤에, compareTo() 함수를 Override하면 됩니다. 이 때, 현재 객체와 넘어오는 객체의 값을 비교하여, 값을 나타내주는 것에 따라 오름차순/내림차순이 결정됩니다. 1. this(현재 객체)가 비교 객체보다 뒤에 있어야 한다면 -> 오름차순 : 양수(1) /// 내림차순 : 음수(-1) 2. this(현재 객체)가 비교 객체보다 앞에 있어야 한다면 -> 오름차순 : 음수(-11) /// 내림차순 : 양수(1) 3. this(..
다음은 코드트리를 풀다가 컴파일 에러가 발생했던 코드이다. List ansList = li.stream() .filter(o -> o.weather.equals("Rain")) .sorted(Comparator.comparing(Weather::getDate) .thenComparing(Weather::getDay)) .toList(); 위 코드는 인텔리제이 IDE에서는 문제가 되지 않았다. 따라서 의심 없이 제출을 눌렀는데, 컴파일 에러가 발생하였다. 런타임 에러면 이전에 배열을 사용중이었기에 indexException이겠거니 하겠지만, 컴파일 에러라고 하니 "오타가 있나?" 하고 봤다. 하지만 생각해보니 정상적으로 실행되었던 코드이기에 자바 버전 문제임을 느끼고 검색을 했다. Stream.toList..
출처: https://devjem.tistory.com/41 최근 스트림 API에 대해 집중적으로 공부하는 와중에 map과 flatMap의 차이점을 더 자세히 정리하고 싶어서 포스팅을 하게 되었습니다. Map이란? map은 스트림 내부의 요소 하나하나에 접근해서 제가 파라미터로 넣어준 함수를 실행한 뒤 최종연산에서 지정한 형식으로 반환해주는 메서드 입니다. List people = Arrays.asList( new Person("personA", 24), new Person("personB", 26), new Person("personC", 28), new Person("personD", 30) ); 위와 같은 리스트를 예시로 만들어보겠습니다. List nameList = people.stream() ...
자바 8 이후부터 람다와 스트림을 이용한 함수형 프로그래밍이 적극적으로 도입되었습니다. 이번에는 이 중에서 stream에 대하여 집중적으로 학습해보려 합니다. 스트림이란? 스트림은 foreach iterator를 사용하기보다, 메서드 체이닝을 활용하여 원하는 연산을 수행할 수 있도록 구현한 것입니다. 메서드 체이닝을 통해서 좀 더 직관적으로 어떠한 연산을 수행하는지 표시하기 때문에 유지보수성이 올라간다는 큰 장점이 있습니다. import java.util.List; import java.util.stream.*; public class Main { public static void main(String[] args) { List list = Arrays.asList(1, 2, 3); Stream stre..
Java에는 Arrays.sort(arr)를 이용하여 오름차순 정렬이 가능하다. 잘 사용하진 않겠지만 Arrays.sort(arr, 시작 idx, 끝 idx + 1)을 사용하여 특정 구간만 오름차순으로 정렬할 수도 있다. import java.util.Arrays; public class Main { public static void main(String[] args) { int[] arr = new int[]{12, 41, 37, 81, 19, 25, 60, 20}; Arrays.sort(arr);// 전체 정렬 for(int i = 0; i < 8; i++) System.out.print(arr[i] + " "); // 12, 19, 20, 25, 37, 41, 60, 81 Arrays.sort(ar..
만약 지역 변수와 전역 변수의 이름이 동일할 경우, 예를 들어 public class Main { public static int a = 10, b = 20; public static void printAandB() { System.out.println(a + " " + b); } public static void modify(int a, int b) { System.out.println(a + " " + b); printAandB(); int temp = a; a = b; b = temp; } public static void main(String[] args) { modify(50, 60); printAandB(); } } 위와 같이 전역 변수에도 int a, int b가 정의되어 있는데, modif..