티스토리 뷰
■Object클래스
1.toString()
2.equals()
3.hashCode()
JVM에서 관리하는 중복없는 값. 실제 메모리에 할당되는 주소와 다르다.
String 클래스에서는 필드의 해쉬코드값이 아닌 필드 안에 있는
문자열 상수값의 해쉬코드값을 리턴하도록 재정의하였다.
※ 컬렉션 프레임워크 챕터에서 재정의 목적을 이해하도록 한다.
(해쉬코드)
메모리 관리를 JVM이 해줌.
필드 > JVM(에 할당할 때 갖는 필드의 고유한 값을 hashCode) > hashCode값이 메모리에 올라가면 주소값
메모리까지 가기전의 주소
실제 주소가 부여되기 이전의 주소
메모리에 올리기 전에 준비할 때 쓰는 주소
자바 자체적으로 만들어 놓은 중복없는 값
hashCode가 부여가 됐으면 거기에 맞게끔 실제 메모리에 할당될 때, 거기에서 실제 주소값이 부여가 되면서 동작함.
필요하다면 hashCode를 재정의해서 내가 원하는 값을 리턴하기
RAM : random access memory(값이 랜덤하다는 뜻)
문자열 값의 주소를 리턴할 수 있게끔 String 에서 재정의 하였음.
(클래스 : HashCodeTest)
-------------------------------------------------------------------------
■Wrapper Class : 기본 자료형들의 클래스 타입(래퍼클래스)
클래스타입 객체 = new 클래스타입(일반타입의 값); // boxing, 권장하지 않는다
클래스타입 객체 = 클래스타입.valueOf(일반타입의 값); // boxing
일반타입 변수 = 객체.000Value(); //unboxing
JDK4버전 이상부터는 auto를 지원한다.
클래스타입 객체 = 일반타입의 값; //auto boxing
일반타입 변수 = 객체; //auto unboxing
■Wrapper Class를 사용하는 이유
원시타입(일반타입)을 박싱하면 다양한 메소드를 제공받을 수 있다.
여러 일반 타입을 하나의 타입으로 묶기 위해서는 반드시 클래스 타입(Wrapper Class)으로
사용해야 되고, 이 때에는 박싱을 해준다.
(패키지 : wrapperTest)
-------------------------------------------------------------------------
■알고리즘
어떤 문제가 발생되었을 때 해결할 수 있는 절차 혹은 순서
■자료구조
의미 없는 데이터를 하나의 정보로 만들어주는 알고리즘들의 집합,
수집한 자료를 저장하는 방법
알고리즘(빵집에서 빵만드는 순서)
문제를 해결할 수 있는 순서나 절차
자료구조(빵집)
의미가 없었던 데이터가 자료구조를 통과해서 하나의 정보가 되는 것
값을 담기만 해도 자료구조(변수도 자료구조다)
10 > 의미 없음
int age = 10; > 자료구조를 만나고 의미가 생기고 정보가 됨.
■컬렉션 프레임워크 : 자료구조
많은 데이터를 쉽고 효과적으로 관리할 수 있는 표준화된 방법을 제공하는 클래스들의 집합.
컬렉션 : 먼저 의미없는 데이터 수집
프레임워크 : 만들어진 틀 >> 알맞는 목적으로 사용하기
1. List extends Collection
- List 구현 클래스
■Vector(자바 초창기에 제작된 프로젝트) : 용량 관리, 보안성 강화, 처리량 감소
■LinkedList(연결된) FirstIn,LastOut(선입후출),넣을 때 빠르고 가져올 때 느림 : FILO으로 인해 넣을 때는 빨라도 뺄 때는 상대적으로 느리다.
■ArrayList(회사에서 주로 사용) : 인덱스로 데이터를 관리한다.
컬렉션 클래스 중 실무에서 가장 많이 사용되는 클래스이다.
배열의 특징인 인덱스를 이용하여 값을 저장하고 관리한다.
- 배열과 ArrayList의 차이
배열은 길이에 제한을 두어야 할 때 자주 사용되고,
ArrayList는 몇 개의 데이터가 들어올 지 알 수 없을 때 사용한다.
2. Set extends Collection
3. Map
■인터페이스끼리 상속할 때도 extends를 사용함
list쓰려면 ~이렇게 해야해 (강제성) >> 인터페이스
list, set 공통요소가 많으니까 Collection에 상속한 것임(묶어서 관리)
■몇개의 데이터를 추가해야 할 지 모를 때 arraylist(처음에는 0칸에서 시작, 추가할 때마다 한 칸씩 늘어남)
길이의 제한을 두기 위해 배열 사용(ex.선착순 100명)(동적 메모리에 할당, 동적 배열만 가능)
자료구조는 모두 Util 안에 있음 >> 내부API, 기본API
■클래스타입 뒤에 꺽새 >> 제네릭(일반적인, 포괄적인, 이름이 없는)
<E> (element)
제네릭
객체화 시 타입을 지정하는 기법.
설계할 때에는 타입을 지정할 수 없기 때문에 임시로 타입을 선언할 때 사용한다.
제네릭은 캐스팅을 할 필요가 없음.
장점 : 따로 다운 캐스팅을 할 필요가 없다. / 지정할 타입에 제한을 줄 수 있다.(상속 사용해서)
■자료구조
의미없는 데이터를 정보로 만들어 줌
의미없는 데이터가 어떤 타입인 지 알 수 없음 > 제네릭(임시로 타입을 새롭게 만들어서 사용할 때 타입을 알려줌)
add() 값 더해주기
size() (용량에 포커스, 배열에서 length()와 동일)
get() 값 가져오기
개발자의 편의에 맞게 만들어 놓은 게 > 컬렉션 프레임워크
for(;;) >> for문으로 무한반복으로 돌리는 방법, 조건식이 false가 될 수 없음.
대표적인 알고리즘 ; 정렬, 무작위로 섞기(방법이 다양함) >> 여러가지 알고리즘이 만들어져 있는 클래스 >> Collections
Collection 인터페이스
Collectinos 클래스 > static메소드로 만들어져 있는 sort메소드
값의 타입이 제네릭
객체의 타입은 arraylist
(클래스 : ArrayListTest)
-------------------------------------------------------------
Collections.sort(오름차순으로 정렬)
Collectinos.reverse(중간을 기준으로 순서를 바꾸기>내림차순 가능)
Collectinos.shuffle
//추가(삽입)
50뒤에 500삽입
//수정
90을 9로 수정
//삭제
80삭제
1.인덱스로 삭제
2.값으로 삭제
---------------------------------------------------------------
[심화 실습]
User 클래스 선언
- 이름, 아이디, 비밀번호, 폰번호
- private으로 선언
- 기본생성자만 선언
- toString() 재정의
.getName()
.getId()
.getPw()
.getPhoneNumber()
객체명.toString()
UserField 클래스 선언
- 회원 정보를 담을 DB를 ArrayList로 선언
- 아이디 중복검사
- 회원가입
- 로그인
- 암호화
- 비밀번호 변경(비밀번호 찾기 서비스)
- 인증번호 전송
Page 클래스 선언
- main 메소드 선언
- 테스트 진행
'2022 > java 2' 카테고리의 다른 글
day14[Collection Framework_HashSet,Iterator,HashMap,Stream] (0) | 2022.08.18 |
---|---|
day13[ArrayLIst 실습,빠른for문] (0) | 2022.08.18 |
day11[예외처리,API,Object_toString,equals] (0) | 2022.08.11 |
day10[추상클래스,인터페이스,내부/익명클래스,람다식] (0) | 2022.08.10 |
day09[day01~09 종합실습] (0) | 2022.08.10 |