Java 공부 15

입력값의 제공 횟수가 정해져있지 않을 때의 해결법 (백준 기준)

백준 문제를 풀다 보면, 입력값의 제공 횟수가 정해져있지 않은 문제가 자주 등장한다. 예를 들면 다음 문제와 같다. https://www.acmicpc.net/problem/4436 4436번: 엘프의 검 중간계에 살고있는 엘프 종족은 특정 숫자를 다른 숫자보다 중요하다고 믿는다. 따라서, 그들은 금속 n만큼을 이용해서 칼을 만들 때, 두께를 다음과 같은 규칙을 지키는 k로 한다면, 엄청나게 www.acmicpc.net 본 문제에서는 한 줄에 하나씩 입력값이 주어진다. 단, 총 몇 줄의 입력값이 주어지는지는 정해져있지 않다. 따라서 계속해서 반복문을 돌리며 입력을 받다가, 입력값이 null이 되는 순간 작동을 종료해야 한다. 예를 들면 다음과 같이 하면 된다. import java.io.BufferedR..

8장 프록시와 연관관계 관리

주요 내용 요약 프록시: 프록시란 무엇인가? 어떻게 작동하고 사용하는가? 즉시 로딩과 지연 로딩: 즉시 로딩과 지연 로딩은 무엇인가? 각각 어느 상황에 사용해야 알맞은가? 이를 언제 판단하는 것이 좋은가? 컬렉션 래퍼는 무엇인가? 영속성 전이: 영속성 전이란 무엇인가? 종류는 어떠한가? 고아 객체: 고아 객체란 무엇인가? JPA가 고아 객체를 자동으로 삭제하게 하려면 어떻게 해야 하는가? 프록시 한 마디로 정리하자면, 실제 클래스를 상속 받아 만들어진 가짜 객체이다. 여러 데이터 A와 B가 서로 연관관계를 가질 때, A를 조회할 때마다 이에 연결된 B 데이터까지 무조건 함께 조회할 필요가 있을까? 그렇게 하면 어플리케이션의 효율이 떨어질 위험이 있다. 이럴 때, 연관된 객체의 조회를 미루어두기 위해 사용..

개요

이 카테고리는 김영한의 저서 '자바 ORM 표준 JPA 프로그래밍'을 읽고 노트정리를 남기는 카테고리이다. 한 장마다 하나의 게시글을 작성한다. https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=62681446 자바 ORM 표준 JPA 프로그래밍 에이콘 오픈 소스 프로그래밍 시리즈. 이 책은 JPA 기초 이론과 핵심 원리, 그리고 실무에 필요한 성능 최적화 방법까지 JPA에 대한 모든 것을 다룬다. www.aladin.co.kr

Class로 클래스의 정보 얻어오기 (리플렉션)

인프런에서 스프링 입문 강의를 듣다 보니 .class라는 것이 많이 나와서, 이것이 뭔지 간단하게 정리해두고자 한다. 리플렉션(1), Class 클래스 리플렉션(Reflection)은 객체를 통해 클래스의 정보를 분석해내는 프로그램 기법입니다. (사전적 의미 : 거울 등에 비친, 반사) 클래스 파일의 위치나 이름만 있으면 해당 클래스의 정보를 얻어내고 joont.tistory.com 이 블로그 글이 도움이 많이 되었다. 리플렉션이란 리플렉션은 어떤 객체를 가지고, 그 객체에 해당하는 클래스에 대한 정보를 알아내는 것이다. 클래스를 정의해놓은 코드를 찾아가지 않아도, 그 클래스를 바탕으로 생성된 한 객체의 이름만 알고 있으면 객체를 이용하여 클래스의 정보를 분석해낼 수 있다. Class 자바에는 Class..

람다식 (Lamda Expression)

스프링 기초 공부를 하던 중, 강사님의 예시 코드에 람다식이 자주 등장해서 찾아보게 되었다. 일단 스프링 공부를 별 문제 없이 해나갈 수 있을 정도로만 람다식에 대해 살펴보고 내가 스스로 알아들을 수 있으며 앞으로 잊지 않는 데 도움이 될 정도로만 간단하게 정리해보기로 했다. 람다식 만드는 법 함수를 람다식으로 고쳐쓸 때의 규칙은 다음과 같다. 함수의 리턴 타입과 함수명을 지운다. 매개변수들의 타입을 명시하지 않아도 알 수 있는 상황이라면 매개변수들의 타입을 생략할 수 있다. (코드를 짜다 보면 맥락상 알 수 있는 경우가 대부분이기 때문에 웬만하면 생략한다) 매개변수가 하나뿐이고 타입을 생략하였다면 ( ) 를 생략할 수 있다. 타입을 생략하지 않았다면 ( ) 는 지울 수 없다는 점에 주의하자. 매개변수가..

자바에서 1차원 배열을 활용한 우선순위 큐 구현하기

2022 상반기 신촌 ICPC 알고리즘 캠프의 트리 강의 내용을 기반으로, 매우 기본적인 우선순위 큐 프로그램을 구현하였다. 아래는 해당 강의의 노트정리 게시글이다. 초급 9회차 트리 강의 초반부에는 트리에 대한 기본적인 설명이 진행된다. 특히 적어둘 만한 것으로는 이진 트리에 관한 내용이 있었다. 학교 수업에서 배웠으나 잊고 있었던 내용인데, 이 기회에 확식히 기억해 blowupmomo.tistory.com 우선순위 큐의 작동 방식을 제대로 이해하기 위하여 만들어보았다. 아무 자료도 안 찾아보고 주먹구구식으로 구현했다. 이것보다 많이 효율적인 구현 방식을 찾게 되면 하단에 추가하겠다. 2022.07.19 정수만 저장하는 우선순위 큐이다. 정수의 크기가 클수록 우선순위가 높다. 커맨드를 입력해 콘솔에서 ..

자바에서 내 마음대로 정렬하기: Comparator Overriding

기본 데이터타입이 아닌 객체(Object)를 정렬해야 할 때가 있다. 또한, 자바에서 기본으로 제공해주는 정렬함수로는 수행하기 힘든 복잡한 방식/기준의 정렬이 필요할 때도 있다. 백준 #1931 회의실 배정 문제가 그 예시이다. 이럴 때 쓸 수 있는 방법은 여러 가지가 있는데, 그 중 Comparator의 compare 함수를 재정의하여 사용하는 방법을 정리해보겠다. 자바에 정의되어있는 Comparator를 오버라이드하여 내가 정한 기준에 따라 객체를 정렬하도록 만드는 방식이다. 어떤 새로운 형식의 객체를 정의하든지 상관 없다. 정렬의 방식과 기준도 자유롭게 정할 수 있다. 1차원 배열을 정렬할 때는 Arrays.sort() List 등을 정렬할 때는 Collections.sort()를 사용한다. 사용법..

자바로 트리 만들기

자바에서 간단한 트리를 만들어보았다. 클래스 Node 필드: 이름, 부모, 자식들 public int name; public Node parent; public ArrayList childs; 메소드: 생성자 public Node (int name){ this.name = name; childs = new ArrayList(); } 트리는 Node 객체들의 배열이다. 직관적으로 사용하기 위하여 1번 노드는 tree[1], 2번 노드는 tree[2]인 것으로 한다. 즉 5개의 노드를 가진 트리는 길이가 6인 Node 배열로 구현한다. parent가 null이면 그 노드는 root이다. childs가 비어있다면 그 노드는 leaf이다. 코드 다음은 입력받은 노드의 바로 아랫단계의 자식들을 모두 출력하는 코드..