본문 바로가기

study/java

(36)
객체가 담긴 List 정렬 - stream을 활용해서 복잡한 정렬하기. 실은 그다지 복잡한 정렬은 아니다.(실은 나한텐 복잡하다) 가정: Student라는 클래스가 있다. 이것은 수업 점수가 담긴 Map Score를 갖고 있다. 그런데 학생마다 Score에 담긴 값이 다르다. 어떤 학생은 수학 수업을 듣지 않아, math에 대한 점수가 없고, 어떤 학생은 컴퓨터 수업을 듣지 않아 computer에 대한 점수가 없다. 여기서 나는 과목 점수를 기준으로 학생들을 정렬할 것이다. 따라서 어떤 학생은 기준이 되는 과목이 없을 수도 있다. 처음에 compareTo메소드를 사용하려고 했으나, 기준이 명확하지 않고, 보편적인 것이 아니기 때문에 포기했다. => 내가 방법을 못찾은 것이지, compareTo 메소드를 사용해서 할 수도 있을 것이다. 그 후에 방법을 고민하다 IDE의 자동완..
자바 코딩 테스트 삽질 - 마침표로 split 하기 코딩 테스트에서 마침표 . 를 갖고 split을 했더니 계속 안됐다. 온라인 에디터를 사용해서 그런 것인줄 알았는데 그게 아니라 split("\\.")으로 했어야 했다. 스택오버플로우에서 찾아보니 특수문자여서 그렇다고 한다. 심지어 \.으로 인식이 안됐다. 역슬래쉬+역슬래쉬+마침표 -> 이렇게 split해야 된다. stackoverflow.com/questions/14833008/java-string-split-with-dot Java string split with "." (dot) Why does the second line of this code throw ArrayIndexOutOfBoundsException? String filename = "D:/some folder/001.docx"; Str..
엉터리 정리 - map(), orElseGet() 스프링 부트 프로젝트에서 클라이언트 요청을 처리하는 메소드를 작성할 때, map() 메소드와 orElseGet() 메소드를 자주 사용한다. map()은 stream 클래스의 메소드다 간단히 요약하면, 스트림을 매개변수로 받고 함수(메소드)를 적용해 스트림을 반환하는 함수이다. DB에서 데이터를 꺼내고 처리할 때 많이 사용한다. orElseGet()은 Optional 클래스의 메소드다. 스프링에선 DB에서 데이터를 꺼낼 때, 찾는 데이터가 없을 경우가 있기 때문에 Optional 타입으로 꺼낸다. Optional 타입 데이터가 null 값을 갖는 경우, 전달된 함수를 실행시키고, 그 리턴값을 저장한다. 두 메소드의 사용 예. DB에서 데이터를 꺼내 처리할 때 사용한다. 람다식을 통해 데이터를 처리하고 반환..
엉터리 정리 - java.util.Optional<T> Optional 클래스는 T 타입의 객체를 포장하는 Wrapper class다. 모든 타입의 객체가 들어갈 수 있다. Optional 객체를 사용하면 NullPointerException 예외 피할 수 있다. 널 값으로 인해 발생하는 예외를 처리할 수 있게 된다. 스프링부트에서 JPA를 사용할 때, JpaRepository를 통해 데이터를 받아올 때 null 값인 경우를 대비해 Optional 타입으로 값을 받아온다. Optional item = itemRepository.findById(id); Optional 메소드 static Optional empty() 아무런 값도 가지지 않는 비어있는 Optional 객체를 반환함. T get() Optional 객체에 저장된 값을 반환함. boolean is..
자바/JAVA JAR 위키피디아 : ko.wikipedia.org/wiki/JAR_(%ED%8C%8C%EC%9D%BC_%ED%8F%AC%EB%A7%B7) JAR(Java Archive, 자바 아카이브)는 여러개의 자바 클래스 파일과, 클래스들이 이용하는 관련 리소스(텍스트, 그림 등) 및 메타데이터를 하나의 파일로 모아서 자바 플랫폼에 응용 소프트웨어나 라이브러리를 배포하기 위한 소프트웨어 패키지 파일 포맷이다. 클래스의 모음이다. zip 알고리즘과 같기 때문에 zip 툴로도 사용할 수 있다. 자바 애플리케이션을 개발하고 하나의 파일로 묶어 실행할 수 있게 해준다. JAR로 배포하면 어디서든 실행 가능하다.(자바가 설치된 곳에서)
자바/JAVA 스트림(Stream) 스트림을 람다식을 이용해 배열, 컬렉션을 다루는 기술(클래스)이다. 스트림을 사용하면 자료의 대상과 상관없이 동일한 연산을 수행할 있다.(자료의 추상화) 배열, 컬렉션의 원소들에 대해 동일한 연산을 수행할 수 있다. 또한 스트림 객체는 한번 생성되면 다시 재사용할 수 없기 때문에, 재사용을 위해선 새로운 스트림 객체를 생성해야 한다. 배열의 스트림 생성 java.util.Arrays의 stream() 메소드로 생성. int[] arr = {1,2,3,4}; Arrays.stream(arr); 컬렉션의 스트림 생성 스트림을 변수에 담으려면 java.util.stream.Stream에 담는다. List strLIst = {"토르","로키","퀵실버","완다"}; strList.stream(); // 스트림을..
자바/JAVA 람다식 람다식은 자바에서 함수형 프로그래밍을 구현하는 방식이다. 함수형 프로그래밍 순수 함수를 구현하고 호출하는 방식이다. 매개 변수만을 사용하도록 만든 함수로 외부 자료에 부수적인 영향이 발생하지 않도록 한다. 입력 받은 자료만으로 기반으로 수행되기 때문에 외부에 영향을 미치지 않아 병렬처리가 가능하다. 안정적인 확장성 프로그래밍 방식이다. 자바 8부터 함수형 인터페이스를 지원하고 있다. 함수형 프로그래밍을 사용하면 클래스를 생성하지 않고도 함수의 호출만으로 기능을 수행할 수 있다. 람다식 문법 매개 변수를 -> 식으로 함수에 대입한다. 자료형은 생략할 수 있다. 매개 변수 하나인 경우 괄호 생략 가능(두개인 경우는 괄호를 생략할 수 없음) str -> {System.out.println(str);} 중괄호 ..
자바/JAVA 내부 클래스 전에 중첩클래스/중첩인터페이스에 대해 적은 글이 있지만, 이번엔 조금 더 자세하게 적는다. 내부 클래스는 클래스 내부에 구현된 클래스이다. 클래스 내부에서 사용하기 위해 선언하고 구현하는 클래스이다. 주로 내부에서만 사용하기 때문에 이름을 따로 정하지 않고 익명으로 사용한다. 내부 클래스의 유형 종류 구현 위치 사용할 수 있는 외부 클래스 변수 생성 방법 인스턴스 내부 클래스 외부 클래스 멤버 변수와 동일 외부 인스턴스 변수 외부 전역 변수 외부 클래스를 먼저 만든 후 내부 클래스 생성 정적 내부 클래스 외부 클래스 멤버 변수와 동일 외부 전역 변수 외부 클래스와 무관하게 생성 지역 내부 클래스 메소드 내부에 구현 외부 인스턴스 변수 외부 전역 변수 메소드를 호출할 때 생성 익명 내부 클래스 메소드 내부..