728x90

 

사용 프로그램 버젼

IntelliJ IDEA 2022.2 (Community Edition)

 

인텔리제이 라이브러리 등록하는 방법

project Structure - project Settings - Libraries - +버튼(add) - java

 

 

라이브러리가 잘 적용된 화면

728x90
반응형
728x90

 

Cursor 개념

 SQL문을 처리한 결과 집합을 가리키는 개념으로

일종의 포인터(C 포인터 개념과 유사하다고 함)

 

자바하는데 왜 뜬금없이 SQL이 나오나 생각이 들텐데 필자도 그렇다...

여튼 아래는 인텔리제이에서 파보다보니까 cursor가 나오게 됐고 "기준점"정도로 이해하면 될 것 같다

 

 

1.listIterator(int index) : iterator를 사용할 컬렉션의 해당 인덱스번호부터 값을 가져온다

// 해당 변수의 1번 인덱스부터 받아오기
ListIterator<Student> li2 = al.listIterator(1);

 

2.hasNext()는 while문으로 한번 돌리고 나면 기준점이 끝으로 가있어 다시 돌려도 의미x

while(li.hasNext()){
    System.out.print(li.next()+" "); // a(0점) a(1점) a(2점) a(3점) a(4점)
}
// hasNext() 두번째 돌리면 처음부터 다시 가는게 아니라 이미 끝에 있기에 의미없음
while(li.hasNext()){
    System.out.print(li.next()+" "); // 출력x
}

 

3.출력x던 hasNext()를 hasPrevious()를 쓰면 다시 출력이 된다

// hasNext() 두번째 돌리면 처음부터 다시 가는게 아니라 이미 끝에 있기에 의미없음
while(li.hasNext()){
    System.out.print(li.next()+" "); // 출력x
}
System.out.println();
while(li.hasPrevious()){
    System.out.print(li.previous()+" "); // a(4점) a(3점) a(2점) a(1점) a(0점)
}
System.out.println();
// hasPrevious()로 앞으로 돌렸기에 기준점이 앞으로 와있어 hasNext() 다시 작동
while(li.hasNext()){
    System.out.print(li.next()+" "); // a(0점) a(1점) a(2점) a(3점) a(4점) 
}

 

원데이터인 ArrayList인 al에 add하면 추가값이 잘 나오는데 ListIterator인 li2에 add하면 값이 while+hasNext()에서 안나온다. 근데 디버깅하면 안에 size도 그렇고 값이 추가된 것 같이 나오는데 이것저것 해봤지만 미스테리

아직까지 왜 5,6이 추가 안됐는지는 미지수고 더 파보다간 아무것도 못할 것 같아서

나중에 다시보기로  하자

 

 

 

728x90
반응형
728x90

 

프로젝트보다 한단계 윗개념인 워크스페이스 개념이

인텔리제이에서는 없는 걸 알았고, 나의 경우 관리 편의상 워크스페이스 위에 폴더를 하나 더 두어서 관리 중인데

이게 또 인텔리제이에 혼란이 있는 것 같다

구글링해보면서 JDK나 모듈 관련 설정도 만져보고 런실행환경에 들어가서 이것저것 만져봐도 계속 에러가 떴는데

인텔리제이로 프로젝트를 만들어서 하니까 잘 작동했다. 즉, 이클립스에서 만든 기존 프로그램과 뭔가 문제가 있는 것이다

그래서 하나 새로 만들어서 해보려던 중 아래처럼 프로젝트 파일명에도 문제가 있는 것을 발견

이클립스에서 만든 프로젝트는 01_practice인데 인텔리제이는 숫자로 시작이 안된다고 하니 여기서 일단 충돌

 

728x90
반응형
728x90

 

<이클립스 eclipse 간편단축키>

 

소문자 전체를 대문자로 바꾸는 단축키

ctrl + shift + x

 

코드 자동 생성

alt + shift + s

단축키를 누르면 아래의 창이 뜬다

 

getter & setter 자동 생성

model.vo 클래스에서 필드 부분만 작성 한 후, alt + shift + s해서 Generate Getter and Setter 클릭

아래처럼 자동 생성해준다

 

 

생성자 자동 생성

model.vo 클래스에서 필드 부분만 작성 한 후, alt + shift + s해서 Generate Constructor using Filelds 클릭

 

toString 메소드 자동 생성

model.vo 클래스에서 필드 부분만 작성 한 후, alt + shift + s해서 Generate to String()... 클릭

 

이제 힘들게 model.vo 코드들을 일일히 다 쓸 필요없다. 시간과 에너지를 아끼고 새거 배우는데 집중하자

 

 

728x90
반응형
728x90

 

 

설정되어 디렉토리 경로들이 어그러졌기 때문에 구동이 안될 것이다

이때 체크할 포인트를 알아보자

 

1.project Explorer - 해당 프로젝트 우클릭 properties 선택 - java bulid path - libraries 탭

missing 나는게 있는 체크

missing 떠있는 걸 edit으로 경로 재연결

 

 

 

2.properties - facets - runtimes에 에러 있는지 확인

있다면 Servers탭으로 이동

Runtime environment 들어가서 톰캣 디렉토리가 잘 연결이 되었는지 확인

 

 

728x90
반응형
728x90

 

MVC 로직 작동 순서 설명 (feat. JDBC 메뉴구현)

메뉴파일 MVC패턴 설명 with JDBC & oracle

 

1.run파일에서 뷰의 메뉴 메소드 호출

(view를 기준으로 하나씩 구현해가면 덜 헷갈린다)

package com.kh.run;
import com.kh.view.Menu;

public class Run {
	public static void main(String[] args) {
		**new Menu().mainMenu();**
	}
}

 

 

2.뷰의 메뉴 메소드에서 사용자에게 메뉴 번호 입력받아 해당 번호를 실행하기 위해 콘트롤러에게 해당 번호 메소드 요청

public class Menu {
	public void mainMenu() {
	Employee**Controller ec** = new EmployeeController();
	do { 			
			System.out.println("====================");
			System.out.println("[Main Menu]");
			System.out.println("1.전체 사원 정보 조회");	
			// ... 
	switch(user) {
			case 1: **ec.selectAll()**; break;
			case 2: break;
			// ...
			default: System.out.println("잘못 입력")	
			}
		} while(user != 0); 

 

 

3.컨트롤러에서 DAO 메소드를 호출한다.(후에 결과값 받아옴)

목적이 DB(오라클)에서 전체 사원정보 조회이기에 자바랑 sql 오라클을 연결해서 받아 올 수 있게 DAO에서 메소드를 호출한다

DAO(Date Access Object) : 외부 데이터 저장공간과 연결하는 역할

세부설명 : DB의 data에 접근하기 위한 객체로 직접 DB에 접근하여 데이터를 삽입, 삭제, 조회 등 조작할 수 있는 기능을 수행한다.

package com.kh.controller;

public class EmployeeController {
public void selectAll() {
		**empDAO.selectAll()**; // DAO에서 메소드를 호출
	}

 

 

4.DAO에서 jdbc 드라이버 연결 및 받아온 데이터를 리턴함

  • 주의사항 : 리턴할 때 리턴하는 데이터의 타입을 보고 해당 메소드( selectAll() )의 반환타입을 리턴하는 데이터로 수정해준다. 보통은 void로 되어있을 것이다.
package com.kh.model.dao;
public class EmployeeDAO {
	public **ArrayList<Employee>** selectAll() {
		// jdbc 드라이버 연결 및 자료 받아오기
		**return list**;
  }	
}

 

 

5.위의 3번에서 empDAO.selectAll(); 이 코드가 필요에 의해 DAO를 호출했기에 받아온 값을 다시 넣어줘야한다 .

그리고 사용자에게 받아온 데이터의 결과값을 보여주기 위해 뷰의 메소드를 호출한다

package com.kh.controller;

public class EmployeeController {
public void selectAll() {
		**ArrayList<Employee> list** = empDAO.selectAll(); 
		
		// list가 비어있을 때 = 사원이 없을 때
		if(list.isEmpty()) {
			menu.displayError("조회 결과가 없습니다.");
		}else {
		// list가 비어있지 않을 때 = 사원 존재할 때
			**menu.selectAll(list);** // DAO에서 받아온 list의 값이 존재하니 받아온 데이터를 넘겨줌
		}
	}

 

 

6.DAO에서 받아온 전체사원정보 데이터를 콘트롤러에서 menu.selectAll(list); 코드를 통해 아래의 뷰 selectAll()메소드로 보내주었고, 받아온 데이터의 형식이 리스트에 여러 행이 존재하기에 for문 돌려서 한 줄 씩 받아와서 출력이 되도록 println() 해준다

package com.kh.view;
public class Menu {
	public void mainMenu() {
		// ...
	}

	public void **selectAll**(ArrayList<Employee> list) {
			for(int i = 0; i < list.size(); i++) {
				System.out.println(list.get(i));
			}
	}
}

 

7.다른 메뉴의 기능 구현할려면 2번으로 돌아가 do while문 안에 switch문의 case에서 컨트롤러를 호출하는 메소드를 기술하고 컨트롤러에 가서 해당 메소드를 생성하는 것으로 이어가면 된다

 

 

요약

V → C → M

V ← C ← M

 

1.run파일에서 뷰 메뉴 메소드 호출

2.실행 할 기능의 컨트롤러 메소드 호출

3.컨트롤러에서 DAO 메소드 호출 for DB연결 및 데이터 가져오기

4.호출된 DAO 메소드에서 jdbc로 db에 연결 및 받아온 데이터를 리턴해준다.

5.컨트롤러에서 필요에 의해 값을 받아오기 위해 DAO 메소드를 호출했으니, 호출요청한 코드에 DAO에서 받아온 데이터를 넣어준다

그리고 사용자에게 받아온 데이터의 결과값을 보여주기 위해 뷰의 메소드를 호출하고 호출하면서 DAO에서 받아온 데이터를 같이 보내준다

6.DAO에서 컨트롤러를 거쳐 받아온 데이터를 사용자에게 보여주기 위해 해당 뷰 메소드에서 받아온 데이터를 출력할 수 있게 데이터처리하고 출력하면 된다

 

JDBC 메뉴구현 : MVC 로직 작동 순서 설명 (notion.site)

 

JDBC 메뉴구현 : MVC 로직 작동 순서 설명

A new tool for teams & individuals that blends everyday work apps into one.

furtive-coelurus-447.notion.site

 

 

 

728x90
반응형
728x90

JDBC(Java DataBase Connectivity)

자바에서 데이터베이스에 접근할 수 있게 해주는 API

JDBC = JAVA + database

     - java 기능구현

     - database 데이터 저장

 

 

java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver

이 메세지가 뜨는 원인은

  1. 드라이브명 쪽 오타
  2. 해당 라이브러리를 넣지 않아서

아래와 같이 JDBC 구현 코드를 다 잘쓴다 하더라도 에러가 발생한다

 

ojdbc 라이브러리를 이클립스에 로드시켜야한다

ojdbc 라이브러리 위치(11g버젼 기준)

C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib

11g 버젼은 ojdbc6 사용

12버젼 이상은 ojdbc8사용

 

이클립스, 라이브러리 적용방법

프로젝트 우클릭 properties - java build path - Libraries tap으로 이동 - 우측에 Add External JARs... 클릭 - 위의 라이브러리 위치의 ojdbc6 클릭 - apply 클릭

 

잘 적용되었는지 확인 방법

적용이 잘 됬으면 아래 처럼 Referenced Libraries 탭에 ojdbc6.jar가 추가된 것을 확인 할 수 있다

 

728x90
반응형
728x90

 

옆 클래스 파일로 빠르게 넘어가고 싶다면?

일일히 마우스로 클릭해주는게 불편하다면?

 

옆페이지로 넘겨주는 기능!

alt + page up

alt + page down

단축키로 빠르게 왔다갔다 할 수 있다

근데 간격이 너무 넓어서 마우스 손을 가져와서 써야해서 불편하니  단축키를 바꾸고 싶으면 아래를 참고하자

 

 

 

 

상단 window - preferences 클릭

keys로 검색해도 되고 general - Editors - Keys로 들어가서

아래와 같이 previous tab과 next tab검색

 

위의 이미지에서 Binding 하이라이트 된 곳에 원하는 단축키를 지정하고 편하게 쓰자

다만 기존 단축키와 겹칠 수 있으니 너무 쉽거나 자주 쓰는 단축키 기능과 겹치지 않게 조심하자

 

 

필자는

previous tab(이전 탭) 이동은 shift + 3

next tab(다음 탭) 이동은 shift + 4

로 변경했다

 

728x90
반응형
728x90

 

인코딩 설정 UTF-8

window - general - editors - text editors- spelling

인코딩 설정은 워크스페이스 당 한번만 하면 된다

 

Default나 Other 둘 중 UTF-8로 되어있는 거에 체크하면 된다

 

preference 아래 검색란에 encoding치고 General - Workspace

하단에 Text file encoding탭에 Other에서 UTF-8에 두고 체크

 

마찬가지로 workspace 아래 다른 탭 CSS, HTML, JSP, XML에도 들어가서 UTF-8을 선택하고 apply and close 하자

 

 

여기까지 했으면 새로운 프로젝트나 파일을 만들 때 UTF-8 인코딩이 다 적용된다

근데 이미 만든 프로젝트 파일 혹은 개별 파일들은...?

또는 따로 필요에 의해 일부만 변경하고 싶을 때 사용 하는 방법

 

왼쪽 Project Explorer에서 변경하기를 원하는 파일or프로젝트 파일 위에서 우클릭 - properties - resource

properties 열면 바로 보이는 resource에서

 

 

 

 

728x90
반응형
728x90

 

 

생성자(constructor)는 두 종류가 있다

기본 생성자와 매개변수가 있는 생성자

 

아래의 코드에는 기본 생성자가 없다

아래 코드의 기본생성자를 써보면 public Circle() {}이 된다

 

Run클래스에서

Circle c = new Circle();을 그대로 쓸려면 기본 생성자가 있어야하고

본래 이미지처럼 기본 생성자 없이 Circle 클래스에서 쓸려면

Run클래스에서 Circle c = new Circle();에서 소괄호()부분에 매개변수를 넣어줘야한다

로직이 이렇게 연결되어있다

 

 

728x90
반응형

+ Recent posts