본문 바로가기

JAVA

(18)
MyBatis → JPA 전환 이유 1. 생산성 향상MyBatis SQL을 직접 작성해야 해서 세밀한 제어는 가능하지만, CRUD 코드도 전부 만들어야 함 → 반복되는 코드가 많음JPA save(), findById() 같은 기본 CRUD를 제공 → 개발자는 비즈니스 로직에 집중 가능2. 유지보수성 & 가독성MyBatis는 SQL과 매핑 XML 관리가 필수 → 규모가 커지면 XML 관리가 복잡JPA는 객체 중심 접근 → 도메인 모델이 코드로 명확하게 표현되므로, 엔티티 관계 파악이 쉬움도메인 변경 시 XML 수정보다는 엔티티 필드 변경으로 대응 가능3. 표준 기술 & 호환성JPA는 자바 표준 (JSR 338) 이라서 Spring Data JPA, Hibernate 등 다양한 구현체와 호환벤더 종속성을 줄이고, 추후 기술 교체/확장 용이다른..
[SPRING]스프링 입문을 위한 자바 객체 지향의 원리와 이해(1) 책을 시작하자마자 작가가 의문을 던진다. 스프링을 이해하려면 이전의 어떤 기술을 이해하고 있어야 하는가? 나는 당연하게 OOP라고 생각했다. 하지만 작가는 다양한 답변을 내놓았고 그중 물론 OOP라는 답변이 있었다. 작가가 원했던 답변은 아래와 같다. SOA CBE OOP 절차적/구조적 프로그래밍 기계어/어셈블리어 5 로 갈수록 작가의 만점과 가까워지는 것 같은데 나는 아쉽게도 OOP만 생각해냈다. 그다음 장으로 넘어가서 작가는 T 메모리 구조를 보여주면서 static, stack, heap 영역들의 역할과 구조 등을 알려 주었는데 정리를 하자면 아래와 같다. 스태틱 영역 스택 영역(메서드들의 놀이터) 힙 영역 스레드 스레트 스태틱 = 클래스의 놀이터 스택 = 메스드의 놀이터 힙 = 객체의 놀이터 위의 ..
[JAVA] 반복문(for문)안에서 삭제 시 생기는 에러(ConcurrentModificationException ) 반복문을 돌리면서 특정 원소를 삭제하던 중 제거되어야 하는 리스트가 제거되지 않는다는 걸 깨달았다. 처음 오류가 난 코드를 공유한다. List exampleList = exampleService.selectExampleList(); exampleList.forEach(item -> { if("삭제".equals(item)){ exampleList.remove(item); } }); 무엇이 문제인지 처음엔 몰랐다. 마찬가지로 아래의 코드에서도 동일한 오류가 발생했다. List exampleList = exampleService.selectExampleList(); for (example exampleList : item) { if ("삭제".equals(item)) { exampleList.remove(i..
예외 처리 가이드 - 임도형님 글 정리 예외 처리에 대해 알아보다 좋은 가이드라인이 있길래 정리를 해보았다. 보라색 가이드글을 먼저 읽고 빨강색 가이드글을 읽으면 이해가 잘된다. 예외 처리 가이드 - 모든 일에는 예외가 있다. - 모든 시스템에는 예측하지 못하는 상황이 있다. - 작업의 절차를 정의하는 프로그래밍에도 예외가 있을 수밖에 없다. 예외의 종류 - 예측 가능한 예외 예측 가능한만큼 예외처리 자체가 개발의 일부이다. ex) 로그인을 실패했다. DB에 레코드가 없다.  파일을 찾을 수 없다. - 예측 불가능한 예외 버그 아니면 시스템 환경에 기인한다. 실시간 처리는 불가능하다, 대신 개선되어야 한다. 예외 처리가 제대로 되지 않으면? - 문제가 발생해도 로그를 보지 않는다. - println(), break point에 의지한 디버깅..
[JAVA] 자바 배열 ArrayList 중복제거 정리 1.로직을 통한 중복 제거 contains()를 사용해, list를 for문 돌면서 arrayList에 포함되어있지 않는 데이터만 arrayList에 add 한다. contains() 함수는 대상 문자열에 특정 문자열이 포함되어 있는지 확인하는 함수다. 대/소문자를 구분한다. package test; import java.util.ArrayList; public class test { public static void main(String[] args) { String[] list = {"중복아님", "중복", "중복"}; ArrayList arrayList = new ArrayList(); for(String item : list){ if(!arrayList.contains(item)) arrayLis..
이클립스 .Project 관련 오류 이클립스에서 프로젝트를 시작하면서 복사. 붙여놓기 열심히 했더니 오류가 터졌다. 평상시에 사용하던 자바가 아니다. 단축기도 먹지를 않는다. 싸함이 느껴졌다. 내가 어디를 잘못했는가 거슬러올라가보았다. 그러다 찾았다. 이클립스에서의 .project 설정을 안해놨다. 다시 .project의 설정을 열심히 복사, 붙여넣기 설정을 완료하니 제대로 돌아간다. 오류도 뜨고 단축키도 잘 먹는다. .project - 이클립스 워크스페이스 상에서 프로젝트를 생성하게 되면 자동으로 생성되는 파일 - 프로젝트 파일 정보가 담겨있다 - "."으로 시작하니 Unix계열에서는 숨김파일 - 프로젝트가 웹 프로젝트인지 자바 프로젝트인지에 구별 가능함 - 자세한 도움말 : https://help.eclipse.org/2021-03/i..
ResultSet 객체의 커서를 조작하는 메소드 first() 커서의 위치를 조회 결과 값의 첫번째로 이동 last() 커서의 위치를 조회 결과 값의 마지막으로 이동 next() 커서의 위치를 순방향으로 이동 previous() 커서의 위치를 역방향으로 이동 getRow() 커서의 인덱스 값을 조회 isFirst() 커서의 위치가 처음인지 여부 조회 isLast() 커서의 위치가 마지막인지 여부 조회 beforeFirst() 커서의 위치를 가장 처음으로 이동: rs.first() 메소드의 이전 공간으로써 비어있는 공간 afterLast() 커서의 위치를 가장 마지막으로 이동: rs.last() 메소드의 이후 공간으로써 비어있는 공간 예시 rs.last(); //커서를 마지막으로 이동 result = new String[rs.getRow()][10]; ..
Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY. Operation not allowed for a result set of type ResultSet.TYPE_FORWARD_ONLY. 위와 같은 오류가 발생했다. Statement stmt = null; ResultSet rs = null; StringBuffer sb = null; try{ stmt = dbconn.create(); sb = new StringBuffer(); sb.append("SELECT * FROM TABLE\n"); System.out.println(sb.toString()); rs = stmt.executeQuery(sb.toString()); rs.last(); String[][] result = new String[rs.getRow()][6]; rs.beforeFirst(..