728x90
반응형

Spring | Tools

 

Spring Tools 4 is the next generation of Spring tooling

Largely rebuilt from scratch, Spring Tools 4 provides world-class support for developing Spring-based enterprise applications, whether you prefer Eclipse, Visual Studio Code, or Theia IDE.

spring.io

 

 

💾 Spring 환경설정

위 링크에 들어가서 해당 파일을 다운로드 받고 실행한다.

 

 

 

 

 

 

 

SpringToolSuite4를 더블클릭하여 이클립스를 실행할 수 있다.

 

 

 

 

 

 

 

 

프로그램을 실행한 후, Help -> Eclipse Marketplace를 클릭하여 마켓을 연다.

 

 

 

 

 

 

 

 

eclipse web 검색 -> Eclipse Web Developer Tools 3.23 설치

mybatis 검색 -> MyBatipse 1.2.4 설치

 

동의 또는 다음을 모두 누르고, restart now가 나오면 눌러주면 된다.

 

 

 

 

 

 

새로운 프로젝트를 생성하기 위해 New -> Spring Starter Project를 클릭한다. (없다면 Project에서 찾기)

 

 

 

 

 

 

java Version과 같은 설정등은 본인에게 맞는걸로 선택하고, package에는 Group + Artifact를 작성해준다.

 

Next를 누른 후, 그림과 같이 4개의 dependency를 선택한 후 Finish를 눌러 프로젝트를 생성한다.

 

 

 

 

 

 

 

 

		<!--  JSP -->
        <dependency>
           <groupId>org.apache.tomcat.embed</groupId>
           <artifactId>tomcat-embed-jasper</artifactId>
           <version>9.0.45</version>
        </dependency>
	    <!--  JSTL -->
	    <dependency>
	       <groupId>javax.servlet</groupId>
	       <artifactId>jstl</artifactId>
	       <version>1.2</version>
	    </dependency>

생성된 spring 프로젝트를 열고, pom.xml의 dependency안에 해당 코드를 넣는다.

 

JSP와 JSTL을 사용할 수 있도록 한다.

 

728x90
반응형
728x90
반응형

🎃 에러

public static void main(String[] args) {
		int num = 100/0;
	}

자바에는 '100/0'과 같은 무한대 값을 표현할만한 자료형이 없다.

 

이 코드를 실행하면 빨간줄은 없지만, 무한대 값에 대한 오류가 난다.

 

 

개발 중 Console에서 이러한 예외 문구를 본 적이 있을것이다.

 

해당 사진에서는 int num = 100/0; 부분에서 ArthmeticException이라는 예외가 발생했다고 한다.

 

실행 전에는 빨간줄이 없었는데 이런 문구가 나온다면, 에러 중에서도 예외처리가 가능한 에러인 것이다.

 

 

 

 

 

💊 예외 처리

public static void main(String[] args) {
		try {
			int num = 100/0;
		} catch(ArithmeticException e) {
			e.printStackTrace();
			System.out.println("0으로 나누면 예외가 발생합니다. 프로그램을 종료하겠습니다.");
			
			return; // 메인메서드를 강제종료
		} finally {
			System.out.println("저는 항상 실행됩니다.");
		}
		
	}

try / catch / finally 를 사용하여 예외 처리를 진행한다.

 

try : 예외 처리를 할 코드 (문제가 생길만한 코드)

catch : 예외 처리 (오류가 난 경우 실행될 코드)

finally : 예외처리 여부에 상관없이 무조건 실행되는 코드

 

catch(예외 e)를 적어주면 그 예외에 대한 검사를 하는데, catch(Exception e)로 작성해도 무방하다.

모든 예외들은 Exception을 상속받고 있기 때문에 부모인 Exception을 사용하면 모든 예외가 처리된다. (다형성)

다만 여러 종류의 예외를 각각 다르게 처리하려면 예외를 정확하게 적는 것을 추천한다.

 

e.printStackTrace();를 통해 예외 발생시 Console에 뜨는 문구를 확인할 수 있다.

 

 

 

예외처리가 정상적으로 되었고, 예외 문구도 같이 출력되었다.

 

catch에서 메인메서드를 종료하는 return도 존재했지만, finally는 무조건 실행된다.

728x90
반응형
728x90
반응형

📖 Map

	public static void main(String[] args) {
		Map<String, Object>map = new HashMap<>();
		map.put("name", "러아니푸");
		map.put("pet","순돌이");
		map.put("age",99);
		
		System.out.println(map.get("name")); // 키로 값을 출력
		System.out.println("");
		
		for(String k :map.keySet()) { // 키만 출력
			System.out.println(k);
		}
		System.out.println("");
		
		for(Object v : map.values()) { // 값만 출력
			System.out.println(v);
		}
	}

 

  • 키와 값으로 구성되어있다.
  • 여러 타입의 값을 저장하기에 좋다.
  • 키값은 중복이 허용되지 않지만, 값은 상관없다.
  • for문의 사용이 어렵고, foreach문을 통해 키와 값을 출력할 수 있다.

 

 

 

📖 table join 데이터 받아오는 방법

Emp.java : 사원 정보를 담는 Vo

public class Emp {
	private int empNo;
	private String empName;
	private int deptNo;
    
    // setter/getter, toStrint() 넣어야 합니다
}

 

 

Dept.java : 부서 정보를 담는 Vo

public class Dept {
	private int deptNo;
	private String deptName;
	private String deptLoc;
	
	// setter/getter, toStrint() 넣어야 합니다
}

 

   

    => 사원과 부서 테이블을 join했을 경우의 값을 받아온다.

 

 

 

 

 

😀 Vo 사용으로 처리

 

EmpAndDept.java : Emp와 Dept를 넣은 Vo

public class EmpAndDept {
	private Emp emp;
	private Dept dept;
    // setter/getter, toStrint() 넣어야 합니다
}

 

 

 

 

main.java

   public EmpAndDept selectEmpVoOne() {
      // 사원 정보
      Emp emp = new Emp();
      emp.setEmpNo(1);
      emp.setEmpName("러아니푸");
      emp.setDeptNo(100);
      
      // 부서 정보
      Dept dept = new Dept();
      dept.setDeptNo(100);
      dept.setDeptName("티스토리");
      dept.setDeptLoc("카카오");
      
      // 사원과 부서
      EmpAndDept end = new EmpAndDept();
      end.setEmp(emp);
      end.setDept(dept);
      
      return end;
   }
   
   public static void main(String[] args) {
   
      EmpDao empDao = new EmpDao();   
      EmpAndDept end = empDao.selectEmpVoOne();
      System.out.println(end);
   }

 

  *실제로는 selectEmpVoOne()은 EmpDao에 넣고 사용합니다*

 

  • 새로운 Vo에 join되는 테이블의 객체를 넣어 사용합니다.
  • 이 방식은 새로운 형식의 join을 할 때 마다, 그에 맞는 Vo를 만들어 줘야 하는 방식입니다.
  • 자주 join되는 테이블이면 몰라도 한 두번 사용하는 join을 위해 만드는 것은 비효율적입니다.

 

 

 

😀 Map 사용으로 처리

 

main.java

   public Map<String, Object> selectEmpMapOne() {
      Map<String, Object> map = new HashMap<>();
      Emp emp = new Emp();
      emp.setEmpNo(1);
      emp.setEmpName("러아니푸");
      emp.setDeptNo(100);
      
      Dept dept = new Dept();
      dept.setDeptNo(100);
      dept.setDeptName("티스토리");
      dept.setDeptLoc("카카오");
      
      map.put("emp", emp);
      map.put("dept", dept);
      
      return map;
   }
   
   public static void main(String[] args) {
   
      EmpDao empDao = new EmpDao();
      Map<String, Object> map = empDao.selectEmpMapOne();
      Emp emp = (Emp)map.get("emp");
      Dept dept = (Dept)map.get("dept");
      System.out.println(emp);
      System.out.println(dept);
   }

 

*실제로는 selectEmpVoOne()은 EmpDao에 넣고 사용합니다*

 

  • Emp와 Dept 각각을 Map에 넣어 사용합니다.
  • 새로운 Vo를 만들지 않아 편리하지만 받아서 사용할때는 형변환을 해야합니다.
  • 값을 받아올 필드의 개수가 적다면 굳이 Emp, Dept의 객체를 넘기지않고, 키값에 맞춰 값만 넘겨도 좋습니다.

 

728x90
반응형

'개발 > 백엔드' 카테고리의 다른 글

[spring] spring / web / mybatis 설치 및 환경 설정  (2) 2021.11.02
[java] 에러와 예외처리  (1) 2021.10.07
[java] list / set  (0) 2021.10.06
eclipse 파일 git에 올리기  (0) 2021.09.14
Java 메서드 정리 / 생성자, 일반  (0) 2021.09.13
728x90
반응형
list
public static void main(String[] args) {
		List<Integer> list = new ArrayList<>();
		list.add(1);
		list.add(7);
		list.add(3);
		list.add(2);
		list.add(3);
		System.out.println("toString() 오버라이딩 : "+list);
		
        // for문
		for(int i=0;i<list.size();i++) {
			System.out.print(list.get(i));
		}
		System.out.println("");
		
		// foreach문
		for(Integer n :list) {
			System.out.print(n);
		}
		
	}

 

  • 입력된 값이 순차적으로 들어간다 -> index를 가지기 때문에 for 사용가능
  •  For, foreach 모두 사용 가능하다.
  • System.out.println(list); 형식으로 출력하면 toString()메서드가 오버라이딩 되어있는 것을 알 수 있다.
  • 중복된 값이 들어가도 누락되지 않고 들어간다.

 

 

 

 

 

set
public static void main(String[] args) {
		Set<Integer> set = new HashSet<>();
		set.add(1);
		set.add(7);
		set.add(3);
		set.add(2);
		set.add(3);
		System.out.println("toString 오버라이딩 : "+set);
		
		for(int i=0;i<set.size(); i++) {
			// set은 순서(인덱스)가 없기 때문에 이런식 출력 불가
		}
		
        // foreach문은 가능
		for(Integer n : set) {
			System.out.print(n);
		}

	}

 

  • 입력된 값의 순서가 보장되지 않는다.
  • 순서(인덱스)가 없기 때문에 for를 사용할 수 없다. (foreach는 가능)
  • toString()메서드가 오버라이딩 되어있다.
  • 중복을 허용하지 않기 때문에 중복된 값을 넣으려고 할 경우 무시한다.

 

728x90
반응형
728x90
반응형

1. 깃허브 로그인 후 프로젝트를 저장할 레파지토리를 생성한다.

new 버튼 클릭

 

레파지토리 이름을 작성해주시고 공개여부는 원하는대로 public이나 private를 설정해줍니다. 그리고 생성하시면 됩니다. 요즘은 private도 무료라고 합니다만.. 저는 public으로 했습니다.

 

 

 

 

 

 

2. 깃에 올릴 파일 우클릭 -> Team -> Share Project 클릭

 

 

 

 

 

 

3. Create를 누르고 원하는 위치 선택 후 Finish 클릭

 

모양이 이렇게 변경될겁니다.

 

 

 

 

 

 

 

 

4. 깃허브에 만들어놨던 레파지토리의 <>Code에 들어가서 해당 링크를 복사한다.

복사해둔 상태가 필요한겁니다. 오른쪽 복사 버튼을 직접 누르시는게 더 안전한것같습니다.

 

 

 

 

 

 

 

5. 변경된 프로젝트 우클릭 -> Team -> Commit클릭 후 Unstaged Changes에 있는 모든 것을 Staged Changes로 넘기고 Commit and Push를 클릭한다.

오른쪽 큰 메모장 같은 곳에는 commit 기록을 남겨주시면 됩니다. 이게 어떤 커밋인지...ㅎㅎ

 

 

이렇게 빈 화면이 나온다면 4번 작업을 놓치신겁니다. 여기가 자동으로 채워져야합니다. 자동으로 채워졌다면 Preview를 누르세요.

 

 

 

 

 

 

 

6. 로그인 화면이 나오면 User에는 깃허브 아이디, Password에는 토큰을 넣는다.

 

깃허브 토큰 생성 방법은 인터넷에 쳐보면 또 나올겁니다. 자동 로그인 원하시면 Store in Secure Store 체크해주세요.

 

비밀번호 잊었을때 사용할 질문같은거 설정 간단하게 하시면 되고, push가 정상적으로 되었는지 확인합니다.

 

 

 

 

 

 

7. 정상적으로 Push된 것을 확인할 수 있습니다.

728x90
반응형
728x90
반응형
생성자 메서드
public class Wow {
	
	public Wow() {
	}
	
}

 

- 생성자 메서드는 클래스 명과 동일한 이름을 가지고있습니다.

- 만약 코드에 생성자 메서드가 없다면 디폴트생성자가 컴파일시 자동으로 생성합니다.

 

Wow wow = new Wow( ); 와 같은 객체 생성 코드를 본적이 있으실겁니다.

new는 객체를 만드는 연산자이며, Wow( ) 생성자 메서드를 사용하여 객체를 생성하는 것 입니다.

 

 

 

 

 

일반 메서드
public class Wow {
	
    // 입력 X, 리턴 X
	public void hello() {
		System.out.println("hello");
	}
	
    // 입력 O, 리턴 X
	public void print(String str) {
		System.out.println(str);
	}
    
    // 입력 X, 리턴 O
    public int year(){
    	return 365;
    }
    
	
    // 입력 O, 리턴 O
	public int add(int x, int y) {
		return x+y;
	}	
}

- 일반메서드는 입력값과 리턴값의 유무로 4가지의 형태가 존재합니다.

- 코드의 public 다음위치에는 리턴값의 자료형이 나오고, 리턴값이 없다면 void로 선언하시면 됩니다.

- 입력값이 있는 경우에는 메서드명 다음에 괄호를 열고 넣어주시면 됩니다.

 

public class Wow {
	public static void main(String[] args) {
		Wow wow = new Wow(); // 생성자 메서드
		wow.hello();
		wow.print("fjdkslvn의 블로그");
		System.out.println(wow.year());
		System.out.println(wow.add(1, 2));
	}
}

- 생성자 메서드를 사용하여 객체를 생성합니다.

- 생성된 객체로 메서드를 사용합니다.

- 리턴값이 없는 메서드는 단독으로 사용하고, 리턴값이 있는 함수는 변수처럼 활용 가능합니다.

 

 

결과

 

728x90
반응형

+ Recent posts