티스토리

아삭
검색하기

블로그 홈

아삭

bornsoon.tistory.com/m

bornsoon 님의 블로그입니다.

구독자
2
방명록 방문하기

주요 글 목록

  • [Java] @RestControllerAdvice를 이용한 예외처리 https://velog.io/@woosim34/RestControllerAdvice%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%98%88%EC%99%B8%EC%B2%98%EB%A6%AC 공감수 1 댓글수 0 2025. 5. 5.
  • [Java] 제네릭과 아일드카드 / 공변과 불공변 https://mangkyu.tistory.com/241 공감수 0 댓글수 0 2025. 5. 5.
  • [Spring] 의존성 주입(DI, Dependency Injection) 방식 필드 주입생성자 주입setter 주입 1. 필드 주입 (@Autowired 사용)@Servicepublic class MyService { @Autowired private MyRepository myRepository; public String getData() { return myRepository.fetch(); }} 장점코드가 간결하다.단점final 키워드 사용 불가 (불변성 떨어짐).테스트 시 mock 객체 주입이 어렵다. (테스트 어려움)순환 참조 문제를 컴파일 타임에 잡기 힘듦. 2. 생성자 주입@Servicepublic class MyService { private final MyRepository myRepository; // 생성자 하나 →.. 공감수 0 댓글수 0 2025. 5. 4.
  • [Java] int와 Integer과 null import java.util.PrioirtyQueue;... PriorityQueue prioirtyQueue = new PrioirityQueue(); Integer value = priorityQueue.poll(); // poll()은 큐가 비어있을 경우 null 반환 // int value는 null 값 처리 불가능 // int로 할 경우, NullPointerException이 발생 if (value == null) { // null일 경우 } 컬렉션 자료구조를 사용할 때, 컨테이너가 비어있으면 NullPointException이 발생하는 경우가 종종 있다.이 때, Integer로 반환받으면 null을 처리할 수가 있다. int는.. 공감수 1 댓글수 0 2025. 5. 3.
  • [Java] 시간 초과 [백준 11279번] 에서 힙을 직접 구현해보다가 시간 초과가 된 부분이 있었다.복잡한 조건문이 문제가 되었었다. 수정전 (오답 부분)while (true) { int leftChild = parent * 2; int rightChild = parent * 2 + 1; if (index > rightChild) { if (array[leftChild] > array[rightChild] && compare(leftChild, parent)) { swap(leftChild, parent); parent = leftChild; } else if (array[rightChild] > array[leftChild] && compar.. 공감수 0 댓글수 0 2025. 5. 3.
  • [Java] RuntimeException RuntimeException은JVM의 정상적인 실행 중에 발생하는 예외의 슈퍼 클래스이다.RuntimeException 및 해당 서브 클래스는 unchecked exception이다.unckecked exception은 메서드 또는 생성자의 실행에 의해 발생한다.메서드 또는 생성자 경계 외부로 전파될 경우 메서드 또는 생성자의 throws 절에서 선언될 필요가 없다.예외 처리 구문이 없어도 컴파일 오류가 발생ㅜ하지 않는다.대표적인 RuntimeException1. NullPointerException(객체가 null인 상태에서 해당 객체의 메서드나 필드에 접근하려 할 때 발생)2. ArrayIndexOutOfBoundsException(배열의 인덱스가 범위를 벗어났을 때 발생)3. ClassCast.. 공감수 0 댓글수 0 2025. 5. 3.
  • [Java] Queue의 add/offer, remove/poll, element/peek 의 차이 import java.util.Queue;public class Main { public static void main(String[] args) { // Queue 선언 Queue q = new LinkedList(); // 추가 q.add(x); q.offer(x); // 제거 q.remove(); q.poll(); q.clear(); // 맨 앞 값 조회 q.element(); q.peek(); }} 에러를 발생 or null 또는 false 반환 추가add()값 추가 성공 시 true 반환큐가 꽉 찬 경우 IllegalStateException 에러 발생offer()값 추가 성공 시.. 공감수 0 댓글수 0 2025. 5. 3.
  • [Java] 접근 제어자 UML 표기법- : private~ : default# : protected+ : public_ (속성이나 메서드 아래의 밑줄 표시) : 정적 멤버public모두가 접근 가능protected상속 / 같은 패키지 내의 클래스에서 접근 가능[default]같은 패키지 내의 클래스에서 접근 가능private본인만 접근 가능 상속을 받지 않았다면 객체 멤버는 객체를 생성한 후 객체 참조 변수를 이용해 접근해야 한다.정적 멤버는 클래스명. 정적 멤버 형식으로 접근하는 것을 권장한다.※ 정적 메소드 (static 메소드) 안에서는 객체 변수 접근이 불가능!!!!public인 정적 변수 pubSt 접근 범위ClassA ClassA.pubStpubStthis.pubSt사용 가능사용 가능사용 가능같은 패키지상속한 경우.. 공감수 0 댓글수 0 2025. 5. 3.
  • [Java] Map.Entry<K, V> / Map의 key, value 접근법 entry (엔트리): Map의 키(Key)와 값(value)의 쌍 하나하나를 말한다.Map map = new HashMap();map.put("apple", 1);// 내부적으로는 다음과 같은 entry로 저장된다.// Entry: "apple" = 1 entrySet(): map.entrySet()은 Map의 모든 엔틀들을 Set으로 반환하는 메소드이다.for (Map.Entry entry : map.entrySet()) { System.out.println(entry.getKey() + " = " + entry.getValue()); // entry.getKey() -> key값 // entry.getValue() -> value 값} keySet()for (String .. 공감수 2 댓글수 0 2025. 5. 1.
  • [Java] LinkedHashMap과 HashMap의 차이 HashMap저장 순서: 보장하지 않음→ 삽입한 순서와 무관하게 키들의 순서가 매번 바뀔 수 있음.성능: 매우 빠름 (평균 O(1) 조회/삽입/삭제)null 허용: 키에 하나, 값에 여러 개 null 허용용도: 순서가 중요하지 않은 일반적인 키-값 저장Map map = new HashMap();map.put("apple", 1);map.put("banana", 2);map.put("cherry", 3);for (Map.Entry entry : linkedHashMap.entrySet()) { System.out.println(entry.getKey() + " = " + entry.getValue());}// 출력 순서 예: banana, cherry, apple (불규칙)LinkedHashMap저장.. 공감수 0 댓글수 0 2025. 5. 1.
  • [Java] 스택 - LinkedList / Deque / Stack 결론부터 말하면 스택을 구현하기 위한 클래스로는Deque > LinkedList > Stack (권장 X) 순으로 좋다! 1. Deque stack = new ArrayDeque(); 클래스: java.util.ArrayDeque상속 구조: Deque 구현체특징:배열 기반이지만 자동으로 크기 조절됨push(), pop(), peek() 사용 가능 (Deque 인터페이스)null 저장 불가Stack보다 훨씬 빠름 (동기화 X, 최신 컬렉션 구조)권장 여부: ✅ 최고의 선택 (성능, 설계 모두 우수)2. LinkedList stack = new LinkedList>();클래스: java.util.LinkedList상속 구조: Deque 구현체특징:addFirst(), removeFirst(), peekFi.. 공감수 0 댓글수 0 2025. 5. 1.
  • [Java] 컬렉션(collection) (컨테이너(container)) Setadd("one") : 새로운 자료를 삽입하는 메소드로 성공하면 true, 실패하면 false 반환.size() : 입력된 자료의 개수 반환.contains("four") : "four"가 존재하면 true, 그렇지 않으면 false 반환.remove("four") : "four"라는 자료를 삭제하는 메소드로 삭제에 성공하면 true, 실패하면 false 반환.clear() : 입력된 모든 자료를 삭제. List (ArrayList, LinkedList)add("one") : 새로운 자료를 삽입하는 메소드로 항상 true 반환.add(1, "one") : 위치 1에 "one"이라는 자료를 삽입하는 메소드로 위치 1(두 번째 위치)에 이미 자료가 존재하면 하나씩 뒤로 밀어서 삽입. 자료의 개수를 넘어.. 공감수 0 댓글수 0 2025. 4. 29.
  • [Java] Comparator, CompareTo, thenComparing CompareTo란 정렬할 때 객체끼리 비교하는 방법을 정의하는 함수이다.배열을 Arrays.sort()할 때,int[]나 String[]처럼 기본 타입 외의사용자가 정의한 클래스는 어떤 기준으로 비교할지 알려줘야 하기 때문이다. compareTo Comparator클래스 안에 "implements Comparable" 하고compareTo 작성"Arrays.sort(배열, (a, b) -> {})" 로 정렬 기준 따로 작성클래스 수정 필요클래스 수정 없이 외부에서 기준 설정코드가 클래스에 묶여있음정렬할 때마다 다른 기준을 쉽게 줄 수 있음 compareTo 사용법a.compareTo(b) 반환값 a -1 a가 b보다 앞a == b0 a > b1a가 b보다 뒤 Comparator사용법Arrays.sort.. 공감수 1 댓글수 0 2025. 4. 28.
  • [Java] DFS 스택 DFS를 사용하는 것이 더 안전 (재귀는 스택 오버플로우 위험)import java.util.Stack;public class Main { private static boolean[] visited; public static void main(String[] args) { // 예제 그래프 초기화 (0번부터 8번까지의 노드) int n = 9; graph = new ArrayList(); for (int i = 0; i ()); } // 간선 추가 (양방향) addEdge(0, 1); addEdge(0, 2); addEdge(1, 3); addEdge(1.. 공감수 1 댓글수 0 2025. 4. 26.
  • [Java] BFS import java.util.LinkedList;import java.util.Queue;public class Main { // 그래프를 인접 리스트로 표현 private static List> graph; private static boolean[] visited; public static void main(String[] args) { // 예제 그래프 초기화 (0번부터 8번까지의 노드) int n = 9; graph = new ArrayList(); for (int i = 0; i ()); } // 간선 추가 (양방향) addEdge(0, 1); addEdge(0,.. 공감수 0 댓글수 0 2025. 4. 26.
  • [Java] StringBuilder StringBuilder는 문자열을 다룰 때 성능을 크게 향상시키기 위해 사용된다. 문자열 불변성 문제 해결: Java의 String 클래스는 불변(immutable)이기 때문에 문자열을 생성할 때마다 객체가 새롭게 생성되어, 메모리 사용량이 증가하고 성능이 저하된다. 여기서 문자열의 생성이란, 문자열끼리의 연결도 포함하는데 문자열의 덧셈을 하면 새 문자열이 생성되기 때문이다.메모리 효율성: StringBuilder는 내부적으로 가변 크기의 문자 배열을 사용하므로, 문자열 연결 작업에서 불필요한 객체 생성을 줄입니다.시간 복잡도 개선: String 연결 O(n^2) -> StringBuilder 사용 O(n)사용 사례: 큰 출력, 문자열 연결의 반복, 복잡한 출력 형식 public class Main {.. 공감수 0 댓글수 0 2025. 4. 25.
  • [Java] ProcessBuilder java.lang.ProcessBuilderJava 애플리케이션에서 시스템 명령어나 스크립트를 실행할 수 있게 하는 클래스.다양한 프로세스의 입출력을 관리할 수 있다.1. 시스템 명령어(cmd) 실행2. 프로세스 실행환경 설정3. 외부 프로세스의 표준 입력 / 출력 / 오류 처리4. 비동기적인 프로세스 실행 및 종료 대기* @Async를 붙이면 비동기 처리 가능 public static void main(String[] args) throws IOException, InterruptedException { ProcessBuilder builder = new ProcessBuilder(); builder.command("cmd.exe", "/c", ".\\test.bat); //운영체제가 윈도.. 공감수 1 댓글수 0 2025. 3. 25.
  • [Spring] NoArgsConstructor / AllArgsConstructor @NoArgsConstructor@AllArgsConstructor위의 두 가지의 어노테이션은 Lombok의 어노테이션이다. Lombok은 불필요한 코드와 작업을 줄여주는 라이브러리이다. @NoArgsConstructor@NoArgsConstructor은 파라미터가 없는 디폴트 생성자를 자동으로 생성해주느 어노테이션이다.이를 사용하면, 클래스에 명시적으로 선언된 파라미터가 없는 생성자가 없더라도 인스턴스 생성이 가능하다. @AllArgsConstructor@AllArgsConstructor은 모든 필드 값을 파라미터로 받는 생성자를 자동으로 생성해주느 어노테이션이다.이를 사용하면, 클래스에 명시적으로 선언된 모든 필드 값을 파라미터로 가진 생성자가 없더라도 인스턴스 생성이 가능하다. 공감수 0 댓글수 0 2025. 1. 25.
  • Spring Boot Starter https://start.spring.io/ 초기에 package 등록하면 자동으로 scan 해줌build.gradle 파일의 dependencies 수정하면 refresh 필요! → 그러면 버전이 Reset 되기 때문에 아래 설정을 build.gradle 파일에 추가(Gradle > Refresh Gradle Project) 공감수 0 댓글수 0 2024. 11. 28.
  • [Java] DAO / DTO / VO / Domain DAO (Data Access Object)DAO는 DB의 데이터에 접근하기 위한 객체를 가리킨다. DB에 접근하기 위한 로직을 분리하기 위해 사용한다.직접 DB에 접근하여 data를 삽입, 삭제, 조회 등 조작할 수 있는 기능을 수행한다.(예: Query가 들어있는 메소드를 가진 클래스) DTO (Data Transfer Object)DTO는 계층 간 (Controller, Vies, Business Layer) 데이터 교환을 위한 Java Bean을 의미한다.DTO는 로직을 가지지 않는 데이터 객체익, getter / setter 메소드만 가진 클래스를 의미한다. VO (Value Object)VO는 Value Object의 약자로, Read-Only 속성을 가진 값을 가진 객체이다. 자바에서 단순히.. 공감수 0 댓글수 0 2024. 11. 5.
  • [Java] Upcasting (업캐스팅) 상속 관계에 있는 부모와 자식 클래스 간에는 서로 간의 형변환이 가능하다. 업캐스팅은 자식 클래스가 부모 클래스로 형변환하는 것을 말한다.이 때, 자식 클래스는 부모 클래스에 있는 멤버에만 접근이 가능하다. (업캐스팅 멤버 제한)또한 명시적 캐스팅(Explicit Casting)이 아닌 묵시적 캐스팅(Implicit Casting)이 가능하다.(반대로 다운캐스팅은 명시적 캐스팅을 해줘야하고 보통 업캐스팅한 자식 클래스를 복구할 때 쓰인다.) 예) List의 메소드만 쓰고 싶을 경우List array_List = new ArrayList(); ※ 업캐스팅을 해둬 자식 클래스에서 오버라이딩 된 메서드는 자식 클래스의 메서드로 실행된다.  공통적으로 할 수 있는 부분을 묶어서 관리할 때 쓰인다.상속 관계에서 .. 공감수 0 댓글수 0 2024. 10. 31.
  • [Java] Stream Java 8에 추가된 Stream을 쓰면,람다식 표기법을 활용해서 코드를 함축적으로 표현할 수 있고 병렬처리도 가능하게 된다.추가로 stream을 사용해 코드를 함축적으로 작성하게 되면,코드의 변수 등이 외부에 노출되지 않아 도중에 변수에 다른 값이 대입되는 등의 외부 노출 부작용(Side Effect)를 방지할 수도 있게 된다. Stream은 배열 Array 타입이나 Collection 인터페이스의 List나 Set 타입에도 쓸 수 있다. 다음은 Array와 List의 stream 메소드를 활용한 예이다.import java.util.Arrays;// 필터 filter// 누적계산 reduceInteger sum1 = Arrays.stream(num).filter((a) -> a%2 == 0).redu.. 공감수 0 댓글수 0 2024. 10. 23.
  • [Java] Java의 인터페이스 1. @FunctionalInterface사용자 정의 인터페이스@FunctionalInterfaceinterface Plus { void plus(int a, int b, int c);}Plus pl = (a, b, c) -> System.out.println("1. FuctionalInterface: " + (a + b + c)); pl.plus(1, 2, 3); 인터페이스를 사용해서 람다 객체를 생성할 때 인터페이스를 직접 정의하지 않고도,자바에서 제공하는 인터페이스를 사용해서 람다 객체를 생성할 수 있다. 2. Consumer : 리턴값이 없는 accept() 메서드Consumer consumer = (t) -> System.out.println(t);consumer.accept("2. Hello.. 공감수 0 댓글수 0 2024. 10. 22.
  • [Java] Set 인터페이스와 Map 인터페이스 Set 인터페이스중복불가HashSet Classadd(x)size()remove(x) contains(x) - hash 내부에 있는지 확인iterator() - 요소 순차 접근메소드: add, size, remove, contains, iterator입력순대로 순서가 유지되지 않는다.해시 코드로 저장해서 검색 속도가 빠름.정렬해서 반환해준다.LinkedHashSet메소드 위와 동일입력순대로 순서가 유지된다.해시 코드로 저장해서 검색 속도가 빠름. ------------------------------------------------------------------------------------------------------------------ Map 인터페이스키와 값으로 연관 배열을 생성키를 해시 .. 공감수 0 댓글수 0 2024. 10. 21.
  • [Java] Link 인터페이스를 구현한 ArrayList와 LinkedList List ← 인덱스 기반인 배열의 오버헤드 발생 문제점을 해결 (인터페이스)중복허용가변적 크기입력된 순서대로 저장코드에서 list를 구현한 클래스명만을 바꾸기만 하면 프로그램의 자료구조를 바꿀 수 있음. ArrayList ← List를 구현한 클래스LinkedList ← 다른 알고리즘으로 List를 구현한 크래스순차적인 처리에 빠른 속도 제공인덱스를 이용한 요소 접근ArrayList array_List = new ArrayList();ArrayList 클래스의 메소드와 멤버변수를 쓸 수 있음List array_List = new ArrayList();List의 메소드만 쓰고 싶을 경우ArrayList의 메소드add(x)size()indexOf(idx) // 인덱스가 있으면 인덱스 값을 반환, 없으면 -1.. 공감수 0 댓글수 0 2024. 10. 21.
  • [Java] 실수 float, double 자바에서는 실수형을 다룰 때 부동 소수점 방식을 사용하기 때문에 float a = 0f; 또는 double b = 0; 을 하면변수 a, b가 정확한 0이 되지 않는다. 때문에 0.0 또는 0.0f로 나누게 되면 결과는 무한대(Infinity) 또는 NaN(Not a Number)이 된다.3 / 0.0 // 무한대(Infinity)5 % 0.0 // NaN 위의 결과에서 계속 연산을 하더라도 무한대는 무한대, NaN은 계속 NaN이 되기 때문에나눗셈 연산을 할 때에는,나눗셈 연산의 결과가 무한대 혹은 NaN이 되는지 먼저 확인하고 연산을 계속해 나아가는 것이 좋다.이를 확인하기 위한 함수가 Double.isInfinite()와 Double.isNaN()이다.double a = 4 / 0.0doub.. 공감수 0 댓글수 0 2024. 10. 18.
  • [Java] 입력 자바에서 입력을 받기 위해서 쓰는 클래스가 바로 Scanner이다. Scanner를 통해 입력을 받기위해서는 Scanner의 객체를 일단 생성해 주어야 한다.그리고 그 객체를 통해 변수에 입력값을 대입하는 것이다.다음과 같은 코드로 입력받으면 된다.import java.util.Scanner;Scanner scanner = new Scanner(System.in);// 입력된 값을 변수 input에 대입String input = scanner.nextLine();...함수 끝// Scanner객체 꼭 닫아주기!! (자원 낭비 방지!)scanner.close(); 여기서 꼭 좋은 습관을 들여줘야하는데코드가 끝나서 입력이 필요없을 때 꼭 " scanner.close(); "의 한 줄을 마지막 줄에 추가해주어.. 공감수 0 댓글수 0 2024. 10. 18.
  • [Java] 변수 변수의 범위(= 변수의 수명, 가시성)에 따라인스턴스 변수 (=객체 변수)  -- 클래스 정의에서 선언정적 변수 (= 클래스 변수) -- 클래스 정의에서 static 키워드와 함께 선언 (프로그램과 동시에 메모리에 생성되고 프로그램이 종료되면 함께 사라짐) 로컬 변수 (지역변수) -- 메서드 및 if 등의 블록 내에서 선언 ( 인스턴스 변수나 정적변수가 아니면 전부 로컬 변수)      ** 정적 변수나 정적 메소드는 static 메모리 영역에 존재해서 객체가 생성되기 전에 이미 할당되어 있기 때문에 여러 객체가 해당 메모리를 공유하고 객체의 생성 없이 바로 사용할 수 있다.( 일반적으로 static 변수는 public 및 final과 함께 사용되어 public static final로 활용된다.) 공감수 0 댓글수 0 2024. 10. 14.
  • [Java] 오버플로, 언더플로, BigInteger 오버플로우(Overflow), 언더플로우(Underflow)가 발생해도 오류가 나지 않고 실행이 되기 때문에아주 큰 숫자나 아주 작은 음수를 다룰 때 주의 깊게 처리해야한다!!!---> BigInteger를 사용하는 방법도 있다.package basic.type;import java.math.BigInteger; // 큰 숫자를 다루기 위한 확장형 BigIntegerpublic class TypeEx02 { public static void main(String[] args) { int c =1234; long d = 123456; // 123456L : 자동형식변환 // 오버플로, 언더플로 System.out.println(Long.MAX_VALUE); // 9223372036.. 공감수 0 댓글수 0 2024. 9. 24.
  • [Java] 자바의 메모리 구조 메모리에 올릴 수 있는 것     →  숫자(정수, 실수) , 논리(true, false) , 문자 3가지뿐!!---------------------------------------------------------------------------------------------------------------------------스택- 기본형 (숫자, 문자, 논리형)이 저장됨- 힙 영역에 생선된 객체들을 참조하는 주소값이 할당됨 힙- 인스턴스 변수(객체)가 저장됨- new 연산자로 생성된 객체가 저장됨 Method(Static) 영역- 상수 풀... 전역변수와 정적 멤버변수가 저장됨 공감수 0 댓글수 1 2024. 9. 24.
    문의안내
    • 티스토리
    • 로그인
    • 고객센터

    티스토리는 카카오에서 사랑을 담아 만듭니다.

    © Kakao Corp.