- Today
- Total
목록java (24)
개발하는 고라니
Proxy JPA에서 Proxy란, 실제 데이터를 갖고있는 Entity가 아니라 Entity의 class를 상속받는 객체이고, Entity를 가리킨다. 그래서 Proxy의 내부는 텅 비어있고, 실제 Entity를 가리키는 Entity target를 갖는다. 결과적으로 Proxy와 실제 class의 모습은 동일하며, 사용자 입장에서는 뭐가 class고 Proxy인지 구분하여 사용할 필요는 없다. 하지만 몇 가지 주의해야할 점은 존재한다. Proxy 객체는 실제 객체의 참조를 보관한다. 그리고 Proxy객체를 호출하면 Proxy객체는 실제 객체의 메서드를 호출하게 된다. 실제 객체를 조회하면 DB에 쿼리(SELECT)를 날려 데이터를 가져오지만, 참조를 조회하면 DB에 쿼리를 날리지 않고 비어있는 Proxy..
Java를 이용해 웹 개발을 한다면 Spring Boot를 높은 확률로 사용할 것이고, 데이터베이스와 연결하기 위해 MyBatis나 JPA를 많이 사용하는 추세이다. 만약 Spring Boot와 MyBatis를 사용할 경우 간단한 설정과 사용법을 보도록 하자 MyBatis 먼저 이를 사용하려면 라이브러리가 필요한데, Maven Repository에서 가져와 인젝션 해주자. 나는 MySQL을 사용할 것 이기에 mysql 라이브러리도 가져왔다. 그리고 jdbc는 필수로 있어야 한다. org.springframework.boot spring-boot-starter-jdbc mysql mysql-connector-java 8.0.24 org.mybatis.spring.boot mybatis-spring-boot..
1938번: 통나무 옮기기 첫째 줄에 주어진 평지의 한 변의 길이 N이 주어진다. (4 n || p[1].x-1 n) return false; for(int a=0; a n || map[log.y][log.x] == '1') return false; return true; } static boolean left(Point[] p){ for(Point log:p) if(log.x n || map[log.y][log.x] == '1') return false;..
추상화 캡슐의 사용되는 공통분모를 잘라내는 것 (공통 분모의 캡슐화). 객체에서 공통된 행위나 속성을 추출하는 것 이라고 말할 수 있다. 상속 : 공통 부분을 뽑아 부모 클래스로 만드는 것 인터페이스 : 상속에서 나아가 개념(기능)만 추출하는 것 추상화로 만들어진 클래스는 다음 2가지의 중요한 특징을 갖는다. 추상 클래스는 뼈대이므로 절대로 실체화(객체화)되어서는 안된다. 공통 분모이기 때문에 그것만 가지고 객체화 하려고 했던게 아니므로 추상 클래스는 뼈대이므로 절대로 사용해서는 안되는 메서드를 가질 수 있다. 자식 클래스가 실수로라도 부모의 메서드를 사용하지 않게 하고, 동시에 반드시 자신의 것으로 구현해서 사용하라는 강제성 부여 가능 추상화는 Is A 상속이랑 비슷하나, 위의 2가지 특징이 다르다. ..
파일에서 문자열 데이터를 읽어 문자열 배열에다 저장하는 프로그램을 생각해보자. names.txt라는 파일에 다음과 같이 값이 있다. 강호동 유재석 하하 김지호 김현준 김태희 박민정 names.txt에서 데이터를 읽어들이기 위해 FileInputStream을 열어야 하고, 데이터를 받아오기 위해 Scanner를 생성해주자. String url = "names.txt"; String[] names = new String[10]; InputStream fis = new FileInputStream(url); Scanner sc = new Scanner(fis); 근데 문제가 있다. 파일의 입력을 계속 받아오긴 할텐데... 파일의 끝을 만나면 그만 읽어야할텐데, 그 끝을 어떻게 표현하지? Scanner를 이용한..
정수형 1차원 배열 arr을 인자로 받아 정수형 1차원 배열을 반환하는 메서드 shuffle이다. 이 메서드는 인자로 받은 배열을 무작위로 섞어준다. 보통 셔플을 하면 원소가 중복되지 않게하기 위해 부가적인 처리가 필요한 경우가 있다. 하지만 이같은 경우는 배열의 원소를 직접 다루는 것이 아닌, 배열의 인덱스를 사용해 Swap을 하므로 값의 중복이 일어날 일이 발생하지 않는다. static Integer[] shuffle(Integer[] arr) { Random ran = new Random(); Integer[] result = arr; for(int i=0; i
16946번: 벽 부수고 이동하기 4 N×M의 행렬로 표현되는 맵이 있다. 맵에서 0은 이동할 수 있는 곳을 나타내고, 1은 이동할 수 없는 벽이 있는 곳을 나타낸다. 한 칸에서 다른 칸으로 이동하려면, 두 칸이 인접해야 한다. 두 칸이 www.acmicpc.net [BFS] Time Limit Exceeded(TLE)를 높은 확률로 만날 수 있는 문제이다. 여러 가지 방식으로 문제를 풀어봤으나 매번 시간 초과... 결국 AC를 받은 것은 다음과 같은 방법이다. * 갈 수 있는 칸을 저장하는 int[][] move * 빈 공간에 대해 방문 체크 boolean[][] visit * 벽에 대해 방문 체크 boolean[][] wall * 지도 저장 int[][] map 1. 입력을 받으며 벽인 곳의 move..
상속이라는 단어는 아마 대부분 알 것이라고 생각된다. Java에서의 상속은 무엇일까? 자식 클래스가 상속받고 싶은 부모 클래스를 선택해서 물려받는다. 이때 상속받는 클래스 = 자식/하위/서브 클래스, 상속을 해주는 클래스 = 부모/상위/슈퍼 클래스 라고 한다. Java에서는 'extends' 키워드를 사용해 상속을 선언한다. 자식 클래스가 상속을 하게되면 부모 클래스의 필드와 메서드를 물려받는다(능력 및 기능을 제공받는다). 하지만 부모 클래스 멤버의 접근 제어자가 'private', 'default'라면 상속은 받을 수 있지만 접근은 어렵다. 그리고 자식 클래스가 여러 부모로부터 다중 상속받는 것은 불가(단일 상속)하다. 반대로 부모 클래스는 여러 자식 클래스에게 상속을 해주는 것이 가능하다. Has ..