-> 길이를 정하고 생성하는게 아님
-인터페이스 타입으로 선언
-생성시 arraylist로
길이를 구하는 사이즈 메소드를 여러번 부르는 일이 생김(성능상 좋지 않음)
-> 한번만 hobbies.size 부르도록
-> 배열이 아니라 값을 일일히 넣어서 초기화 하는 방법도 가능함
-> 용도 생각해서 사용하기가 어려움
-> Map 구조의 절반 구성 : hashset으로 되어있음
-> 인덱스가 없으니까 "향상 for문" 쓰기
-> 데이터 꺼낼 때 쓰는 팔(arm) 만듬
-> flower.iterator(flower hashset에 부착한 팔)
-> arm.hasNext : 잡히는 게 있으면 true(=저장된 데이터가 있음)
-> arm.next : 잡히는게 있으면 데이터 잡아서 꺼내는것
-> 사용법이 다름
기능이 비슷하다(뿌리가 같아서)
-> ★ 웹 개발 시 많이 사용)
(ex) 주소를 입력 했을때 목록 보기 수행 , 추가를 수행 ..
주소에 따라서 무슨 일하겠다
url mapping : (어떤값) 주소에 따라서 무슨 일(어떤걸 사용) 하겠다라고 정해놓는것
어떤 key들어오면 어떤value를 내주겠다
-> 맵 구조 : key값과 value값 따라 자료를 구성하는것
☆hashmap을 많이 사용하는 이유 : 객체(object = instance(실제 기술적으로 메모리에 만들어진 객체)를 대신할 수 있는 자료구조
(ex) 배열 대신 arraylist쓰는 것처럼
객체 대용품 있음
-> 클래스를 안만들고도 '객체'를 전달할 수 있음
hashmap이 나오면 그 자리는 '객체'가 들어갈 수 있는 자리
-> 대부분의 정보를 List<'Map>쓰는 개발자도 있음
-> 필드를 map에서는 "Key"라고 부름 , 필드에 저장된 값 "value"라고 부름
-> 대부분 Hashmap 사용할 때 key값으로 변수이름을 쓰고 value에 변수값을 넣는다
name은 홍길동이다 -> key : name, value : 홍길동
-> hashmap의 절반인 key는 hashset으로 되어있음
-> 3) key의 타입과 value의 타입을 따로따로 잡아야 한다.
생성과정
-> key와 value모두 string 타입
-> 동일한 키는 두개 이상 들어갈 수 없다 ( 만약에 쓰게 되면 ) 기존의 데이터를 덮어써서 지워버림 )
데이터를 value임 -> 이 데이터를 꺼내기 위해서 key 필요함
-> KEY 를 알아야 value도 꺼낼 수 있음
Map에서는 value가 하나의 타입으로 주어저야 함
string하고 integer을 동시에 저장할 수 있는 타입 : object밖에 없음(object는 만능타입임)
-> person 객체 대신 이걸로 쓰면 똑같이 동작함(알아두기)
-> 기존 키를 사용하면 = 기존에 put(메소드)를 이용해서 수정할 수 있음
mapping의 종류 -> putmapping (수정하라는것)
deletemapping(삭제)
getmapping(조회)
...
-> 흔히 사용하는 타입
-> key만 저장하는 구조 : hashset(키의 특징 : 중복 불가능)
-> arm
-> key를 전부 꺼내서 하나씩 꺼낼 수 있다
-> value는 꺼내지 말고 key만
key만 저장할꺼니까 -> key타입으로
-> string으로 되어있으니 당연히 string타입으로!
1.Key만 꺼내서 set에 저장한다.
-> 순서대로 유지되면서 꺼내지지 x
3.get() 메소드에 key를 전달하면 value가 나온다 .
-> 값을 전달하는 목적 : 순서는 상관없음
API 들도 map을 이용하여 정보를 제공해주는 경우도 많고, 값을 전달할때도 map을 이용해서 전달하는 경우도 있음
-> 인덱스가 없으니까 -향성 FOR문
-> 변수 : MAP
-> entry 단위로(key + value 같이 뺌)
entry를 빼더라도 set구조 -> 여기서 뺀게 entry임
entry가 모여있는 set이고 거기서 빼면 entry다
Entry 라는 타입 (인터페이스)가 있음
★ import 잘 확인!
-> entry가 저장된 set
-> Map에 있는 Entry라고 적기도 함(안해도 상관없음)
-> entry로부터 key를 뺴고 싶을때, entry로부터 value를 빼고 싶을때(getter처럼 되어있음)
-> 이 방식이 조금 더 쉬움(둘 중에 꼭 하나는 알고 있어야 함)
생성자 쓰기
학번 : Integer , string 아무거나 해도 상관없음
class이름 쓸 수 x -> clazz
-> 두번째 파라미터는 exam인데, 객체니까 new을 이용해서 만들어야함 **
class가 있으면 class에 있는 객체가 모두 정상적으로 작동되는지 확인하기
-> 생성자만 이용해서 처리하는 것이 가능함
내용이 없는 student를 만들고 그 student에 내용을 채우는 setter을 통해서 내용을 채우고 가능
-> 두가지 생성법 확인
-> 첫번째것이 조금 더 쉬움
-> 학번 준비 = key값 준비
-> 학번
학번을 clazz.get메소드에 전달 -> 학번 전달하면 하면 -> 학생 객체가 나옴
-> clazz에 필요한 정보 모아서 -> 학번만 전달하면 됨
-> board 객체 쓰지 말고 collection 만들기(map과 arrylist만 가지고)
제목 작성자 -> 문자 : 섞여있어서 -> Object
-> key는 그대로 바꾸지 않음
방금 만든 map을 arraylist에 저장할 것
*arraylist 에 저장하는 메소드 : add
나중에 요구사항이 생겨서 반환값을 바꿔야 할때) arraylist에 담아서 반환하는 경우
-> 초기화 블록으로 잡아서 처리
-> 현재 타입이 Map임
게시글 목록을 보면서 게시글 하나를 꺼내는데 그게 map임
모든 map들의 key값을 바꾸면 안된다 !!
-> loop문으로 개선해보기(map에서 loop쓴다고 좋은건아님)
get key가 set로 되어있어서 순서는 안맞음
-> 하나로 합칠 수 있음
-> 자바 유틸의 모든것들
import넣어주기도 하고 잘못들어간 import빼주기도 하는것
-> List안에는 0,1만들어감 -> Integer
배열이면 길이를 정해야하는데 number에 따라서 길이가 계속 달라짐
arraylist가 되면 원하는 만큼 양껏 저장할 수 있음
-> 32 십진수만 전달 자동으로 이진수로 변화되서 저장
예전) 배열
10으로 정해져있어서 9번부터 거꾸로 채웠음
앞으로 순차적으로 채우고 뒤에서부터 읽어내는 방식 (읽기만 뒤에서!)
그냥 ctrl + space로 To_String 만들 수 있음
-> 차이는 본문이 없음
binary 아직 생성이 안되었으니 생성먼저
-> 연산 후에는 number가 %2로 계속 내려감
-> 한번 연산 끝나면 number가 반으로 줄어들게끔 함
-> 미리 가져가라고 return 만들어놓고
->거꾸로 내려오는 for문
-> 마지막것 먼저
-> 노란색 경고 : 이 변수 왜 안쓰는가?
object타입으로 저장된 메소드를 casting해서 arraylist타입으로 캐스팅해서 살려야하는데
답이 맞더라도 경고 메시지가 뜰 수 가 있음?
의도치않게 경고메시지 나오는 경우 있음
경고는 잠재적으로 문제 있는거 아니니? 문제 아니다라고 답을 해줄수 있음
number안쓴거 알고 있으니까 다시는 띄우지 말라는 것 (unused)
-> 0주면 아무것도 안나옴
0나오게 했으면? 생성자쪽에서 0을 줬을때 아무것도 안나오게 되어있음
-> while문이 0보다커야 동작하게 되어있음
컬렉션 프레임워크 사용해서 구하기!
-> 하나로 모을수가 없어서 이름 따로 점수 따로 함
-> map이 5개 (map 1개가 name, 점수)
5개이상 나온다고 치면) 필요한 구조는 arraylist임
-> 그 안에는 map이 들어있음
-> handelr와 student는 map으로 구서 ㅇ
-> arraylist가 만들어지는 타이밍은 scorehandler가 만들어지는 타이밍임
-> arraylist에 추가해서 전달하는 메소드 : add
-> 반환타입 : int
-> 첫번째 사람의 점수 : 최댓값 가짐
여기까지 map
map에있는 점수 꺼낼때 또 get
-> 사실은 , (int) obejct 캐스팅해도 사용가능
-> 안전하게 코드를 만들기 위해서, 뒤에 메소드가 2개 이상 호출시)
-> 가로로 묶어서 첫번째 학생의 점수를 묶어서 최댓값 가져온다
-> int로 캐스팅해주기
-> 동일한게 2개가 들어갔으니 -> refactoring!
-> 반복코드 많이 나옴 (나중에 합칠예정)
반환할값 (최대최소합계평균 -> 4개) 무엇을 반환할 것인가?
하나만 반환할 수 있게 되어있음
-> 여러개의 값을 하나로 묶어서 반환하기!
-> 객체로 묶어서 반환하는 연습했음
-> 객체는map으로 반환할 수 있음
-> 반환타입 map
*평균값 : integer, double 섞여있는 형태
-> integer 는 number라는 클래스의 자식임
-> doulbe은 number라는 클래스의 자식임
-> interger, double 모두 number의 자식이니 number로 해도 괜찮음
-> 결과 받아오는애
Breadchange(빵,잔돈) 대신 Map으로 바꾸기
빵과 잔돈을 map으로 -> 정수 2개를 저장하는 map
bakery 판매 메소드 결과 -> map이 되도록
*남은 수업
★★★IO(업로드, 다운로드 구현가능)
-> 네트워크 자바 코드