[2023.10.13] 개발자 교육 15일 차 : 강의-복습, 인터페이스, 참조타입, Map, List [구디 아카데미/김승수 강사님]

DaramGee·2023년 10월 13일
0

오늘 정리

인터페이스는? 자바에서는 상속은 하나만 가능하지만 인터페이스는 여러개를 이용할 수 있음. 이를 통해 다양한 코드 전개가 가능해지고 다형성을 나타나게 됨.

참조형? 클래스 간 메소드 간의 관계를 만들 수 있는 방법으로 파라미터 안에 참조형인 객체를 참조하여 관계를 만들 수 있음.

복습

  • 다이아몬드 연산자 <> → 내 안에 <> 있다.
    • List list = …; //List는 String 타입이다.
  • 리턴타입
    • 지변을 다른 메소드에서 사용하려면 리턴타입을 활용해야함.

      public class List3 {
      
      	ArrayList<String> methodA(){     //지변을 다른 메소드에서 사용하려면 리턴타입을 활용해야함. 
      		ArrayList<String> fruits = new ArrayList<>(); //생성부 제네릭 타입은 생략 가능하지만 연산자만 입력한다.   
      		fruits.add("🍅");
      		fruits.add(1, "🍓");
      		fruits.add(1, "🍎");                            //사과의 끼어들기 가능
      		return fruits;
      	}
      
      	public static void main(String[] args) {
      		//ArrayList는 싱글스레드 First in last out/싱글스레드에서 안전(혼자 들어갈 때) but, 인터셉트 당할 수 있음. 
      		List3 l3 = new List3();                        
      		ArrayList<String> fruits = l3.methodA();
      		System.out.println(fruits); // List에서는 "["","",""]"
      	}
      }

강의 내용

  • 다형성! → 선언부와 생성부의 타입을 다르게 인스턴스화하기
    • 선언부(추상클래스 or 인터페이스 or 구현체클래스)

      Map<String, String> map = new HashMap<>();
      List<DeptDTO> li = new ArrayList<>();
      
  • 컬렉션 프레임워크 중 List 인터페이스 → 앞에부터 차례대로 채움
    • List 컬렉션 → 자료구조 관련 컬렉션(인터페이스) (https://docs.oracle.com/javase/8/docs/api/)/p.557
    • 배열과 비슷하게 객체를 인덱스로 관리함. but,끼워넣기가 가능함.
    • 인터페이스는 오직 추상메소드(미정)만 갖고 있음.
    • List의 구현체 클래스 종류
      • 어레이리스트 : 싱글스레드에서 안전(혼자 들어갈 때) but, 인터셉트 당할 수 있음.
      • 벡터 : 멀티스레드에서 안전, 어레이리스트보다 읽기, 쓰기 속도 느림. 멀티스레드에서 안전
      • LinkedList :
    • List인터페이스의 메소드(위의 클래스 모두에서 사용 가능)
      • 메소드의 E는 Elemenst로 Object(객체)임.
      • 추가(add) - 메소드 오버로딩, 배열처럼 index는 0부터 시작
        • add(E e) - 맨 끝에 추가

        • add(int index, E element) - 해당 순서로 추가

          public static void main(String[] args) {
          		ArrayList fruits = new ArrayList();   //First in last out
          		fruits.add("🍅");
          		fruits.add(1, "🍓");
          		System.out.println(fruits.get(0));
          		System.out.println(fruits.get(1));
          	}
          package com.step5;
          
          import java.util.ArrayList;
          import java.util.List;
          
          public class List4 {
          	/*선언부*/
          	//선언부 생성자 이름 다르게 -> 확장성, 유지보수 시 코드 수정 양 감소
          	List<DeptDTO> li = new ArrayList<>(); // 앞은 클래스 뒤 구현체 클래스 -> 다형성
          	/*메인메소드*/
          	//스프링에서 JPA로 DB연동할 땐
          	//List<Map<String.Object>>로 한다(특히 조인하는 업무 내용일 때 사용함)
          	//조인(둘 이상의 테이블 연결해서 조회-업무가 복잡할수록)하는 업무 내용일 때 사용함. 
          	public static void main(String[] args) {
          		List4 l4 = new List4();
          		DeptDTO dept = new DeptDTO();
          		dept.setDeptno(10);
          		dept.setDname("영업부");
          		dept.setLoc("부산");
          		l4.li.add(dept);                 //주소번지 두번으로 접근 가능
          
          		dept = new DeptDTO();
          		dept.setDeptno(20);
          		dept.setDname("개발부");
          		dept.setLoc("대전");
          		l4.li.add(dept);                 //주소번지 두번으로 접근 가능
          
          		System.out.println(l4.li);
          		DeptDTO rd = l4.li.get(0);
          		System.out.println(rd.getDeptno()+", "+rd.getDname()+", "+rd.getLoc());
          		rd = l4.li.get(1);
          		System.out.println(rd.getDeptno()+", "+rd.getDname()+", "+rd.getLoc());
          	}
          }
      • 삭제(remove)
        • E remove(int index) - 해당 순서의 객체 삭제
        • boolean remove(Object o) - 주어진 객체를 삭제했는지 확인
        • void clear() - 전체 삭제
      • 검색
        • bollean contains(Object o) - 저장되었는지 확인
        • E get(int dindex) - 해당 순서의 객체를 리턴
        • bollean isEmpty() - 비어있는지 조사
        • int size - 전체 객체 수 리턴
      • 여기서 E는?
        • Object → Element로 용어변경
        • 리턴타입이며, 리턴타입이 있는 메소드는 대입연산자 = 를 사용할 수 있음.\
    • 실습(EmpDTO/DeptDTO에 각자의 객체가 저장되는 List 생성 with List 인터페이스)
  • Map 컬렉션 → 왔다 갔다하며 채움(List보다 속도 빠름)
    • 순서가 없고, 2차 가공이 필요 없음.
    • K 키타입, V 값타입
    • Map인터페이스의 메소드(위의 클래스 모두에서 사용 가능)
      • 추가
        • V put(K key, V value)
      • 검색
      • 삭제
        • void clear()
        • V remove(Object key)
  • 조인할 때 List와 Map을 제네릭으로 섞어서 써야 함.
    • 하나 쓸 땐 List & VO → 계산, 연산, 회계 시(타입맞추지 않아도 되니)
    • 여러개 쓸 땐 List & Map → 타입을 맞춰야 함.
  • Toad 활용
    • 작동안되면?
      • 작업관리자 → 서비스 → 오라클 맨아래 세개 실행
    • 만들어진 변수가져오는 법
      • view → object palette → 해당클래스 우클릭 → Describe → script 부분 복사하여 사용 (아래 단축키 사용하여, 소문자로 만들고 일괄수정하여 사용 가능)
  • 단축키
    • alt Shift a : 선택하여 일괄 수정 가능!
    • ctrl shift y : 소문자로
    • ctrl shift x : 대문자
  • 메소드 설계 시(생성, 삭제, 수정, 추가)
    ViewList로 VO,DTO에 입력 → 저장 → insert 문(오라클 서버 경유) → select
    ----                                ------------------------    -------
    view                                   → action(insert)action(select) → view
  • 삭제하기(1번 인덱스 삭제)
    • 성공 시
      • 입력 - 늘어남 (view → action(insert) → action(select : n건) → view)
      • 삭제 - 줄어듦 (view → action(delete) → action(select) → view)
      • 수정 - 수정 내용 반영(action(select : 1건) → action(update) → action(select) → view)
      • 1건 → VO 사용, n건 → List<VO, DTO, or Map>
    • 실패 시,
  • API
    • void javax.swing.JOptionPane.showMessageDialog(Component parentComponent, Object message, String title, int messageType) throws HeadlessException)
      • 클래스, 메시지, 타이틀명, 아이콘

강의 마무리

  • 치환 등 수업내용 연습 필요
  • java는 html의 데이터를 쥘 수 없음.
    • jsp로 사용 가능
    • 자바자료구조를 JSON 형식으로 넘겨서 사용 가능

0개의 댓글