#️⃣ maven을 사용하면서 알아야 할 것들

1.예외처리

2.컬렉션

3.어노테이션

 


 

 

✅ JDK8부터 적용된 try-with-resource문

: 자원들을 try문 안에 넣어서 진행할 경우 close를 자동으로 해준다.

 

 

 

The try-with-resources Statement (The Java™ Tutorials > Essential Java Classes > Exceptions)

The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See Java Language Changes for a summary of updated

docs.oracle.com

 

👇 기존에는 fianlly 안에 close()를 넣어서 무조건 진행되도록 함

public static void main(String[] args) {
    Connection con = null;
    Statement st = null;
    ResultSet rs = null;

    String url = "url";
    String sql = "select * from member";

    try {
        Class.forName("oracle.jdbc.driver.OracleDriver");
        con = DriverManager.getConnection(url, "id", "pw");
        st = con.createStatement();
        rs = st.executeQuery(sql);

        int count = 0;
        while (rs.next()) {
            String id = rs.getString("id");
            String name = rs.getString("name");
            int age = rs.getInt("age");
            String address = rs.getString("address");

            System.out.printf("%s\t", id);
            System.out.printf("%s\t", age);
            System.out.printf("%s\t", name);
            System.out.println(address);
            count++;
        }
        System.out.println(count);

    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        try {
            rs.close();
            st.close();
            con.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

 

 

👇 try문 안에만 넣고 따로 close를 기재해주지 않아도 저절로 닫힘. 단, jdk버전을 확인하고 사용할 것!

    try {
        Class.forName("oracle.jdbc.driver.OracleDriver");
        Connection con = DriverManager.getConnection(url, "RLAND", "0530");
        Statement st = con.createStatement();
        ResultSet rs = st.executeQuery(sql);

        int count = 0;
        while (rs.next()) {
            String id = rs.getString("id");// 컬럼명은 소대문자를 구분하지 않는다. sql문이 전체조회여도 속성명이 name이면 name만 출력
            String name = rs.getString("name");
            int age = rs.getInt("age");
            String address = rs.getString("address");

            System.out.printf("%s\t", id);
            System.out.printf("%s\t", age);
            System.out.printf("%s\t", name);
            System.out.println(address);
            count++;
        }
        System.out.println("목록수: "+count);

    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    } catch (SQLException e) {
        e.printStackTrace();
    }
    System.out.println("프로그램 종료");

 

 


 

✅ Java Collection과 Generic

stream api : jdk 8~17

 

 

 

✅ 콜렉션

👉 단, 기본형들은 객체가 아니어서 값이 들어갈 공간이 필요함. Object라는 객체로 기본형을 품을 수가 없음. (참조형은 공간이 아니므로) ▶ 공간을 만들어주기위해 wrapper class가 등장함

 

 

 

Object에 다이렉트로 참조되는게 아니라 알아서 박싱이 되었기 때문에 처리된 것.
기본형을 wrapper class로 객체화 해서 참조가 가능해지게 되었다
모든 타입을 다 담아쓰는 컬렉션코드

 

 

#️⃣ 가변을 위해 Object타입에 무조건 다 담아 쓸 때의 문제점

1. 형변환해서 사용해야 한다는 점이 불편함

2. 일반적으론 한 종류만 담아서 사용함

3. 개별적으로 List를 만들어 쓰기도 불편함

👉 개별적으로 만들어쓰지도 않으면서 한종류만 담을수 있는 형태를 필요로 함 > 제네릭이 등장

 

 

✅ Generic

자바에선 템플릿이 아닌 제네릭이란 이름으로 사용된다

👉 Object형의 데이터를 준비하는건 똑같지만 특정 타입만 담을 수 있도록 한다

 

<제네릭>으로 타입을 지정해서 쓰는 컬렉션 코드

 

 

#️⃣ 여러타입을 전달해서 쓰고 싶을때 쓰는 <?> 와일드카드

public class Program {
    public static void print(GList<?> list) { //와일드카드를 사용해서 여러타입을 받을수 있도록 설정
        for(int i=0; i<list.size(); i++)
            System.out.println(list.get(i));
    }


    public static void main(String[] args) {
        GList<String> list = new GList<>();
        list.add("hello");
        list.add("generic");

        GList<Integer> list1 = new GList<>();
        list1.add(333);
        list1.add(444);

        print(list); //만약 print메서드에서 한가지 타입으로만 제네릭이 설정되어있으면 못넘기는게 발생함
        print(list1);
        }

}

 

 

#️⃣ 와일드카드를 확장해서 쓰기

public static void print(GList<? extends Integer> list) {// 받는쪽에서 걸러서 받을때. Integer자식들도 가능하게됨
    for(int i=0; i<list.size(); i++)
        System.out.println(list.get(i)+1); // Integer만 받으므로 연산도 가능해짐

}
	
	
public static void main(String[] args) {

    GList<String> list = new GList<>();
    list.add("hello");
    list.add("generic");

    GList<Integer> list1 = new GList<>();
    list1.add(333);
    list1.add(444);

    GList<Double> list2 = new GList<>();
    list2.add(12.34);
    list2.add(88.8);

//	print(list);
    print(list1);
//	print(list2);

👉 인덱스에서 자유롭기 위해 열거형(iterator)을 가지고 있다

 

 

 

✅ (자바가 제공하는) Set / List / Map 컬렉션

(*C++는 언어에 컬렉션이 포함되어있지않고 외부 라이브러리로 있지만 자바는 언어에 포함되어있음)

 

컬렉션은 데이터를 수집하는 능력을 가지고 있음

 

🔥  set, map, list의 메서드 정리 포스팅

 

1102 | 자바의 정석 기초편 :: ch11-3~11-6

Collection 인터페이스의 메서드 👉 추가 삭제, 검색이 기본 List 인터페이스 - 순서 O (저장된 순서 유지), 중복 O 👉 ArrayList와 LinkedList가 핵심 👉 Vector는 old ▶ ArrayList로 개선됨 set 인터페이스 - 순

ala-nueva.tistory.com

 

 

💥 Set, List, Map의 차이점

1. 키에 대한 차이

2. 중복에 대한 차이

public static void main(String[] args) {
    // 계열에 따라서 데이터를 수집하는 방식과 가지고 있는게 조금씩 다름

    {
        Set<Integer> set = new HashSet<>();
        set.add(3);
        set.add(3);
        set.add(3);

        // set은 식별자가 없어서 값을 달라고 할 수가 없음. 값 자체가 식별자임 > 그래서 중복값을 세지않는다
        System.out.printf("set size is %d\n", set.size());

    }

    {
        List<Integer> list = new ArrayList<>();
        list.add(3);
        list.add(3);
        list.add(3);

        // list는 인덱스가 식별자
        list.get(0);
        System.out.printf("list size is %d\n", list.size());
    }

    {
        Map<String, Integer> map = new HashMap<>();
        map.put("kor", 100);
        map.put("math", 90);
        map.put("eng", 80);

        // map은 키가 식별자 (내가 직접 식별자를 입력해준다)
        map.get("eng");
        System.out.printf("map size is %d\n", map.size());
        System.out.printf("%d\n", map.get("eng"));

		//Menu클래스의 값을 가져와서 value에 넣어도 되고, 직접 넣어도 됨
        Menu menu = new Menu("아메리카노", "Americano", "3000", "473ml");

        Map<String, Object> menuView = new HashMap<>();
        menuView.put("korName", menu.getKorName());
        menuView.put("engName", menu.getEngName());
        menuView.put("price", menu.getPrice());
        menuView.put("size", "Large");
        menuView.put("size", menu.getSize());

        System.out.printf("%s\n", menuView.get("size")); // 덮어씌워져서 473ml로 출력됨
    }
}

 

 

 

#️⃣ Linked data란?

 

 

 


 

 

✅ Dao란?

데이터를 access하는데 도움을 주는 object == dao

요즘은 repository로 명명하기도 한다

 

 

✅ MyBatis로 데이터 접근하기

#️⃣ 화면을 보고 생각해보아야할 것

  • 업무로직
  • 트랜잭션
  • 서비스함수

👉 세가지 모두 같은 의미

 

사용자가 요청하는 것 == 업무

업무를 수반하는 로직 == 업무로직

(* 사용자가 요구하는 데이터를 보여주는 것. 디자인은 껍데기일 뿐, 데이터가 핵심)

 

+ Recent posts