JAVA/JAVA 기초2025. 6. 26. 19:48[JAVA/기초] LineNumberReader + 1 문제

JDK 8을 JDK 17로 마이그레이션 하는중 생긴 문제이다.LineNumberReader lnr = new LineNumberReader(new FileReader(file));lnr.skip(Long.MAX_VALUE);int lineCount = lnr.getLineNumber();targetCnt = prevTargetCount + lnr.getLineNumber() - lineToSkipCount + 1;파일 끝까지 쭉 스킵하고 라인 수를 가져오는 로직이다.JDK 8 시절에는 +1 보정을 넣어서 타겟 수를 계산했다.근데 마이그레이션 이후 같은 로직인데 값이 달라지기 시작했다.문제의 주범https://bugs.java.com/bugdatabase/view_bug?bug_id=JDK-8230342H..

[Spring/기초] Pageable 자주 사용하지만 관심은 없었던 그 녀석
JAVA/JAVA 기초2025. 6. 12. 19:47[Spring/기초] Pageable 자주 사용하지만 관심은 없었던 그 녀석

Paging된 데이터를 만드는 컨트롤러 사용하다보면 Pageable객체를 자주 사용하게 된다.@GetMapping("/users")public Page getUsers(Pageable pageable)그냥 이렇게만 써도, 프론트에서 ?page=0&size=10&sort=name,desc 이런 식으로 요청 보내면정상적으로 10개씩 name 기준 내림차순으로 잘린 리스트가 반환된다.근데 Pageable은 인터페이스이다. 우리는 new도 안했고 객체 생성도 안했는데 이건 어디서 구현체를 받아오는걸까? Pageable & PageRequest Pageable은 인터페이스 진짜 일하는 녀석은 PageRequest이다.Pageable pageable = PageRequest.of(0, 10, Sort.by("nam..

[Java/기초] 인텔리제이 javadoc 자동화?
JAVA/JAVA 기초2025. 4. 5. 20:25[Java/기초] 인텔리제이 javadoc 자동화?

우리는 주석을 달아야한다.코드를 작성하다보면 나중에 이코드가 뭘하는건지 주석을 달야하며 많은 분들이 javaDoc을 이용하는걸로 알고있다./** + Enter이런 간단한 커멘드만 입력하면 바로 주석을 달수 있어서 사람들이 많이 사용하는 거 같다.하지만 이렇게 완전 간단하게 나오며 잘나와봤자 이정도이다.근데 JavaDoc에는 여러 기능이 더있다. 같은 html헤더를 제공하거나, @를 사용한 다른걸 더 넣을수있다.나는 이걸 어느정도 자동화한 틀을 빠르게 불러오고 싶었다.인텔리제이 Live Templates1. Live Templates 생성Settings->Editor->LiveTemplates로들어가서 plus버튼을 누른다. 그럼 2번 Template Group이 나올텐데 여기에 JavaDoc을 추가한다..

[Java/기초] Exceptions 총정리
JAVA/JAVA 기초2024. 7. 7. 22:42[Java/기초] Exceptions 총정리

자바 예외 총정리예외란?사용자의 잘못된 조작 혹은 개발자의 로직 실수로 인해서 발생하는 프로그램 오류를 말한다. 예외처리 코드를 통해서 프로그램을 종료하지 않고 다시 정살 실행 상태가 유지 되도록 할 수 있다.예외 vs 에러에러(error)란 자바 프로그램 밖에서 발생한 오류를 뜻한다. 컴퓨터가 고장이 난다거나. OS에서 비정상적인 상황이 발생해서 JVM이 실행될 수 없는 경우등으로 복구가 불가능 하다.error : 프로세스에 영향을 줌exception : 스레드에만 영향을 줌예외 처리 방법예외 복구 : 상황 파악 후 문제 해결해서 정상 상태로 돌려놓는 방법예외 회피 : throws를 통해서 직접 처리 안하고 호출한 쪽으로 던져 회피예외 전환 : 회피와 비슷하지만 그냥 던지지 않고 적합한 의미를 가진 예..

[Java/기초] 접근 제한자 (public, protected, default, private)
JAVA/JAVA 기초2024. 4. 12. 23:42[Java/기초] 접근 제한자 (public, protected, default, private)

Package-privaet 접근 제한자 자바에서 대부분의 클래스는 외부에서 사용하기 위해서 만드는 경우가 많다. 클래스를 설계할 때 외부 클래스에서 접근할 수 있는 멤버와 접근할 수 없는 멤버를 구분해서 필드, 생성자, 메서드를 설계하는 것이 바람직하다. 이때 누군가는 호출을 어디까지 허용할 건지 만드는 것이 접근 제한자이다. 접근 제한자의 종류와 적용할 대상은 다음 표와 같다. 접근 제한 적용 대상 접근할 수 없는 클래스 public 클래스, 필드, 생성자, 메소드 없음 protected 필드, 생성자, 메소드 자식 클래스가 아닌 다른 패키지에 소속된 클래스 default 클래스, 필드, 생성자, 메소드 다른 패키지에 소속된 클래스 private 필드, 생성자, 메소드 모든 외부 클래스 이젠 클래스,..

[Java/기초] abstract
JAVA/JAVA 기초2024. 3. 4. 18:39[Java/기초] abstract

abstract는 추상이라는 개념이다. 객체를 직접 생성할 수 있는 클래스를 실체 클래스라고 한다면 이 추상 클래스는 클래스들의 공통적인 특성을 추출해서 선언한 클래스이다. 예를 들어서 생물의 특징을 적는 class들이 있다고하자. Bird, Insect, Fish등이 있을 때 이들의 공통되는 필드와 메소드를 모아둔 것이 추상 클래스이다. 여기서는 Animal.class라고 하자 이때 Animal 클래스를 Bird, Insect, Fish들이 상속하게 된다. Animal animal = new Animal(); 추상 클래스인 Animal은 다음과 같이 new연산자를 사용해서 인스턴스를 생성할 수 없다. 실체 클래스들의 공통된 필드와 메소드의 이름을 통일할 목적으로 사용 실체 클래스를 작성할 때 시간을 절..

728x90
image