[2023.10.24] 개발자 교육 22일 차 : 강의-복습, 제네릭, 맵 [구디 아카데미]

DaramGee·2023년 10월 24일
0

오늘 정리

상속 시? 부모클래스로 자식클래스의 변수,메소드를 사용할 수 있나?? Nope 자식이 새로 정의한 메소드로 실행됨(부모의 메소드는 쉐도우 메소드로 됨)

인터페이스 Map의 활용? 여러 프로세스에서 key,value로 구성된 Map이 사용되고 있음.

복습

  • 컬렉션 프레임워크 주소번지 두 번 이상 접근해서 반환 받는 설정

    • Map<String, List<>> / Map<String,Map<String,Object>>
    • Map<key, value> / Set keySet
  • Map

    • VO나 Map은 한 번에 한 개 로우만 담을 수 있음. 여러개 담으면 마지막 것만 기억함.

    • 소셜로그인, 카카오 우편번호 검색, 카카오페이 구현 시 사용 가능

    • 포스트맨 활용 (책검색으로 확인)

      • get → send ( html) 시 코드 확인 가능, 여기서 Key Value값 있듯이 이 모든 것이 Map으로 처리되고 있는 것
    • instanceof 예시

      package collec.map;
      
      import java.util.ArrayList;
      import java.util.HashMap;
      import java.util.List;
      import java.util.Map;
      import collec.list.CustomerVO;
      
      class Map3{
      	Map<String, List<Map<String, CustomerVO>>> map = new HashMap<>();
      	public Map3() {
      		List<Map<String, CustomerVO>> list = new ArrayList<>();
      		Map<String, CustomerVO> imap = new HashMap<>();
      		CustomerVO cvo = new CustomerVO();
      		cvo.setC_id(12);
      		cvo.setC_name("토마토");
      		cvo.setC_birthday("2000-05-11");
      		imap.put("1", cvo);
      		list.add(imap);
      		map.put("outer", list);
      	}
      }
      public class MapMain3 {
      	public static void main(String[] args) {
      		Map3 m3 = new Map3();
      		System.out.println(m3.map.size());
      		System.out.println(m3.map.get("1"));  //왜 null 일까? 
      		System.out.println(m3.map.get("outer"));
      		//m3.map.get("outer")무슨 타입일까? List 타입임. 
      		System.out.println(m3.map.get("outer") instanceof List);             //true
      		System.out.println(m3.map.get("outer") instanceof Map); 			 //false
      		//m3.map.get("outer").get(0)은 무슨 타입인가요? 맵() , VO는 주소번지 
      		System.out.println(m3.map.get("outer").get(0) instanceof Map);   //map
      		//VO타입이야?
      		System.out.println(m3.map.get("outer").get(0).get("1") instanceof CustomerVO);   //VO
      		System.out.println(m3.map.get("outer").get(0).get("1").getC_id());           //VO
      		System.out.println(m3.map.get("outer").get(0).get("1").getC_name());       //VO
      		System.out.println(m3.map.get("outer").get(0).get("1").getC_birthday());   //VO
      	}
      }
  • HashMap

  • HashTable → Vector와 비슷함. 스레드에 안전(하나씩 실행)

강의 내용

  • Map 활용
    • 자유게시판(Q&A, 양도, 공지게시판, 이벤트 게시판 등) → 게시판 솔루션화
      • 변수사용시 검색기능 지원하려면 개발자가 검색엔진을 구현해야함 → API로 제공됨(Map.containsKey(Object Key)

      • 새글쓰기 - insert - 글 번호 없음 - 글 번호 새로 채번

      • 댓글쓰기(응답, 요청) - insert - 기존 글(1건 조회-글번호 있음) 읽고 댓글 쓰기 버튼을 눌러서 내 생각을 붙이기

        public int boardInsert(Map pmap){
        	int result = 0;
        	if(!pmap.contatinsKey("b_no")){ //너 새 글 쓰기야? b_no값이 있으면 댓글, 없으면 새글
        	}
        	else{ //댓글 쓸거야?
        	}
        	//insert 처리 메소드 한번에 호출하기
        	//새글, 댓글쓰기가 하나의 메소드 안에서 처리 가능
        	return result;
        }
      • 글수정하기/글삭제하기/공개여부


  • 인터페이스 (& 추상클래스 → 반드시 구현체 클래스가 필요하다(자바는 생성부의 이름으로 객체가 생성됨))
    • 인터페이스 - 추상메소드(미정→구현체 클래스에서 결정→메소드 오버라이딩)를 선언만 하고 있다. ( 예 : public void m(); )
      • 어떤 자료(수치, 문자열 등)를 읽고, 쓰기에 대한 추상화 인터페이스

      • List : 요소 순회 메소드 지원

      • Map : 요소 순회 메소드 지원

      • Set(UI 솔루션 지원x) : 요소 순회 메소드 지원 x, 순회를 담당하는 Iterator, enumeration 인터페이스를 추가로 사용해야 한다.


      • List,Map,Set 구조체 안에서 꺼내는 일에 대해 추상화 인터페이스

      • Iterator & Enumeration (Colletion요소를 순회) → for 판정

        • 요소의 순회란?
          1. 컬렉션 프레임워크에 저장된 요소들을 하나씩 차례로 참조하는 것
          2. 순서가 있는 List(Map보다 느림) Iterator 없이 순회 가능
        • 예 )
          A is a B → 소나타는 자동차이다 (상속 관계 처리)
          A has a B → 도형 안에 타원은 포함되어 있다. (내부클래스로 설계)
  • 추상클래스
    • 일반메소드도 선언하고 추상메도드도 선언 가능

    • 인스턴스화는 할 수 없지만 생성자는 가질 수 있음.

    • 인터페이스가 추상클래스보다 더 추상적이다(일반메소드를 못 갖기 때문)

      public abstract class Car {
      	int speed;
      	String carName;
      	String carColor;
      	public Car() {}
      	public abstract void display(); //추상메소드
      	public void stop() {
      		speed = speed +1;
      	}
      	public void go() {
      		speed = speed -1;
      	}
      }

  • 상속
    • 부모클래스(Car)로 자식클래스(Sonata) 변수,메소드를 사용할 수 있나?? Nope
    • 메소드 오버라이딩 된 두 클래스 모두에 있는 메소드 사용가능 -> 부모|자식 중 누구의 메소드로 실행?
      • 자식이 새로 정의한 메소드로 실행됨(부모거는 쉐도우 메소드로 됨)

강의 마무리

  • 사이드 프로젝트(멀티채팅구현 시작)

0개의 댓글