오늘 정리
try-catch문? 예외가 발생할 수 있는 코드 블록을 감싸고, 예외가 발생했을 때 해당 예외를 처리하는 코드를 제공한다.
DB연동 과정? JDBC API를 사용하여 Oracle 서버와 통신하는 방법을 학습하였고, 이를 통해 DB연동 과정을 이해하게 되었다.
복습
- 선언부, 생성부 다르게!!
-
다형성, 재사용성, 이식성, 유연성
-
기존의 코드를 변경, 사이드 이펙트 발생(부수효과)
-
전역변수 - 클래스 중심 코딩 전개 - 사이드 이펙트가 발생 o - 람다식과 같은 함수형에서 사용x,
-
지역변수 - 처리 시 메소드 안에서만 유지됨->사이드 이펙트가 발생 x - 안전 - 람다식 함수형 프로그래밍 지원 가능한 이유!
List<JButton> li = new ArrayList<>();
------------- -- --------------
인터페이스, 추상클래스 변수명 = new 구현체클래스();
- 컬렉션 프레임워크
- 자료구조를 API로 구현한것
- 읽기, 쓰기, 검색 기능 가능
- List는 row를 관리
- 제네릭 타입은 컬럼에 해당하는 값을 관리하고, 멀티타입을 적을 수 없어서 2개 이상의 집합을 조인했을 경우, VO 타입 보다는 Map을 사용하는 것이 복잡도를 줄일 수 있음.
- VO패턴과 Map타입을 사용할 수 있는데 VO타입에는 타입이 정확해서 형전환이 필요없지만, Map은 객체타입으로 받기 때문에 그 값을 가지고 연산(회계, 재고관리 등)을 할 때는 형전환을 해야한다. 여기서 casting exception이 다수 발생함.
- 상속
- 상속받거나, 구현체 클래스를 선언할 때 하위클래스를 상속받는게 더 많은 변수와 메소드를 사용할 수 있다.
강의 내용
- Java API를 활용하여 오라클(동기화, 영속성 보장) 서버와 통신하기
- java.sql.* → 커넥션 풀 사용 x
- javax.sql.* → 앤터프라이즈 서버(중간에 미들웨어 관리 : EJB 기술-Spring을 통해 경량서비스 제공)가 제공하는 커넥션 풀 사용 o

- DB연동 4단계
- 데이터베이스 드라이버 로드(연경통로 확보) : 프로그래밍 언어에 따라 데이터베이스와의 연결을 위해 해당 데이터베이스의 드라이버를 로드해야 합니다. 드라이버는 각각의 데이터베이스 시스템에 특화되어 있으며, 사용하는 데이터베이스에 맞는 드라이버를 선택하여 로드해야 합니다.
- 연결 생성: 로드한 드라이버를 사용하여 실제로 데이터베이스와의 연결을 생성합니다. 이 단계에서는 연결 정보(호스트, 포트, 사용자 이름, 암호 등)를 설정하고, 해당 정보를 기반으로 데이터베이스 서버와 통신할 수 있는 연결 객체(Connection Object)를 생성합니다.
- 쿼리 실행: 연결 객체를 사용하여 SQL 쿼리를 실행합니다. 이 단계에서는 CRUD(Create, Read, Update, Delete) 작업 또는 다른 유형의 쿼리 작업을 수행할 수 있습니다. 필요한 경우 매개변수 바인딩 등의 추가적인 처리도 수행할 수 있습니다.
- 결과 처리 및 자원 해제: 쿼리 실행 후 반환된 결과를 받아서 필요한 처리 작업을 수행합니다. 이 단계에서는 조회 결과를 읽거나 변경된 데이터의 영향 범위 등을 확인할 수 있습니다.
데이터베이스 리소스 (연결, 문장 등)가 더 이상 필요하지 않은 경우에는 명시적으로 자원을 해제해야 합니다.
- DB연동 로드맵 (숙달 순서)
- JDBC API 연동 : 원시적, 생산성 낮음(반복코드 多, 일괄처리x ), 코드양 늘어남(오타)
- 학습목표 : List, Map 활용 연습 + CRUD 포함(기본, 게시판 수준 8시간 이내 처리 가능한지)
- ORM 솔루션(iBatis → MyBatis) : 전체 코딩량 30% 이상 줄어듦.
- Spring : JPA API - Hibernate 사용(sql문 없음. but, 클래스 설계는 해야함) 업무 깊이가 깊어지면 조인 테이블이 4~5개 이상이 될 때 설계하기 어려움. (조인 숙지해야함)
- JSON(JavaScript Object Notation)
-
데이터를 표현하기 위한 경량의 데이터 교환 형식
-
이름-값 쌍(attribute–value pairs), 배열 자료형(array data types)으로 구성(Map은 키-값)
-
객체는 중괄호 ({})로 둘러싸여 있으며, 콜론(:)으로 구분
-
배열은 대괄호 ([])로 둘러싸여 있으며, 쉼표(,)로 구분
-
예)
// JSON 객체
{
"name": "John",
"age": 30,
"city": "New York"
}
// JSON 배열
[
"apple",
"banana",
"orange"
]
- 포스트맨& 네이버 개발자센터 사용 등록
- 포스트맨 API 등록 방법
- 포스트맨 앱 열기: 먼저, 포스트맨 애플리케이션을 엽니다.
- 새로운 요청 생성: 왼쪽 상단의 "New" 버튼을 클릭하고, "Request"를 선택하여 새로운 요청을 생성합니다.
- 요청 정보 입력: 요청에 대한 정보를 입력합니다. 이는 API의 엔드포인트(URL), HTTP 메서드(GET, POST 등), 헤더(Headers), 파라미터(Query Parameters 또는 Body) 등을 포함할 수 있습니다.
- 헤더 설정: 필요한 경우, 요청에 헤더를 추가하거나 수정할 수 있습니다. 일부 공공 API는 인증 토큰이나 API 키를 헤더에 포함해야 할 수도 있습니다.
- 파라미터 설정: 필요한 경우, 쿼리 파라미터나 요청 바디에 데이터를 추가합니다. 이는 API가 예상하는 데이터 형식과 맞춰야 합니다.
- 요청 보내기: 모든 설정이 완료되면 "Send" 버튼을 클릭하여 해당 요청을 보냅니다.
- 응답 확인: 서버에서 반환된 응답 결과가 나타납니다. 이는 응답 코드, 응답 본문(JSON 또는 기타 형식) 등으로 구성될 수 있습니다.
- 이클립스에서 json파일 생성 및 사용하기
- new - other - file-파일명.json으로 생성(moduleinfo.java 삭제 / 파일 여는 방법 → 구글- 크롬으로 열기)
- JSON 파일 볼 수 있도록 설정
- Gson 다운로드
- 오라클 JDBC 드라이버 파일 연동
- Oracle JDBC 드라이버는 Oracle 데이터베이스와의 연결을 제공하는 데 사용
- Java 애플리케이션에서 Oracle 데이터베이스에 접근하고 데이터를 검색, 삽입, 갱신, 삭제할 수 있게됨
- 복사하여 해당 현재 작업 중인 로컬폴더로 이동시키기
- 이클립스 빌드패스!
- 빌드패스 → add External jars → 추가한 두 파일 add
- REST(Representational State Transfer) API
- 인터넷에서 정보를 주고받는 방법
- 웹 서비스 아키텍처 스타일 중 하나로, 분산 시스템에서 리소스를 표현하고 상태를 전송하는 데 사용되는 소프트웨어 아키텍처
- 주요 특징(리소스/URI/HTTP 메소드(GET,POST,PUT,DELETE 등)/표현/상태없음/연결)
- 계속 반복되는 코드를 찾아본다 - 개선의지
- 드라이버 클래스 반복이다. - insert, update, delete, select에서 반복
- DML에서 바뀌는 건 DML만 변경되고 컬럼명 변경됨
- 상세조회라면 WHERE empno = 7566
- 업무에 따라(재고관리, 부서관리 등등) 바뀌는건 집합이름과 컬럼명만 바뀌고 나머지는 다 그대로임. - syntax
- 서버에 대한 URL : jdbc : oricle:thin(웹개발시사용):@172.16.2.66:1521:oracl11 - sid 이름
- mysql : jdbc:mysql://172.16.2.66:3306/blog?serverTimezone=Asia/Seoul
- 익명클래스 만들기 (Anonymous class)
-
이름이 없는 클래스로, 클래스 정의와 동시에 인스턴스를 생성하는 방식 → 재사용성 높임, 코드 간결해짐
-
익명 클래스는 주로 인터페이스나 추상 클래스를 구현하거나 확장하는 용도로 사용
-
예(ActionListener 인터페이스를 구현한 익명 클래스를 생성하는 예제)
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
}
});
- 예외처리 시 사용되는 try-catch문
-
예외가 발생할 수 있는 코드 블록을 감싸고, 예외가 발생했을 때 해당 예외를 처리하는 코드를 제공
-
멀티블록이 가능함. 단, 하위에서 상위클래스로 처리함
try {
} catch (예외_타입 변수) {
}
int[] numbers = {1, 2, 3};
try {
int result = numbers[4];
System.out.println(result);
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("잘못된 인덱스입니다.");
}
