Wrapper클래스
: 기본형 타입을 클래스 타입으로 사용하는 방법
- 박싱(Boxing)
기본형 타입 > Wrapper 클래스
- 언박싱(Unboxing)
Wrapper 클래스 > 기본형 타입
jdk1.5버전부터는 오토(auto)가 지원된다.
- Wrapper 클래스를 사용하는 이유
① 변수를 객체로 만들기 위해
② 필요한 메소드를 사용하기 위해
package day19;
public class WrapperTest {
public static void main(String[] args) {
int data = 10;
//Auto Boxing
Integer i_data = data;
//Auto Unboxing
data = i_data;
// int data = 10;
//
// //Boxing
// Integer i_data = new Integer(data);
//
// //Unboxing
// data = i_data.intValue();
}
}
빠른 for문(향상된 for문, forEach문)
- 변수에 각 값이 순서대로 담긴다.
- 반복 횟수를 몰라도 사용할 수 있다.
for(자료형 변수 : 배열명){
}
package day19;
public class ForEachTest {
public static void main(String[] args) {
Object[][] arrObj = {{"ABC", 10},{3.156, 3.587F},{'a', "컴퓨터"}};
//출력 예(빠른 for문만 사용)
//"ABC" 10
//3.156 3.587F
//'a' "컴퓨터"
for(Object[] arObj : arrObj) {
for(Object obj : arObj) {
if(obj instanceof Float) {
System.out.println(obj + "F");
continue;
}
System.out.println(obj);
}
}
//up casting
//auto boxing
// Object[] arObj = {"ABC", 'a', 10, 10.987};
//
// for(Object obj : arObj) {
// System.out.println(obj);
// }
}
}
제네릭(Generic)
: 자료형을 정하지 않는 기법
<대문자>이 있으면 제네릭!
1. Genric Class
클래스 내부에서 사용될 자료형을 선언한다.
2. Generic Method
메소드 내부에서 사용될 자료형을 선언한다.
3. Generic Interface
인터페이스를 지정받은 클래스에서 사용될 자료형을 선언한다.
package generic;
import java.util.ArrayList;
class GnrClass<T>{
private T data;
public T getData() {
return data;
}
public void setData(T data) {
this.data = data;
}
}
class GnrMethod{
public static <T> T function(T data) {
T result = null;
if(data instanceof Integer) {
result = (T)"정수";
}else if(data instanceof Double || data instanceof Float) {
result = (T)"실수";
}else if(data instanceof Character) {
result = (T)"문자";
}else if(data instanceof String) {
result = (T)"문자열";
}
return result;
}
}
public class GnrTest implements GInter<Double, Integer>{
public static void main(String[] args) {
// System.out.println(GnrMethod.function(3.14F));
// GnrClass<Integer> g = new GnrClass();
// g.setData(540);
// System.out.println(g.getData());
}
@Override
public Double add(Double data1, Double data2) {
// TODO Auto-generated method stub
return null;
}
@Override
public Double sub(Double data1, Integer data2) {
// TODO Auto-generated method stub
return null;
}
@Override
public Integer mul(Integer data1, Integer data2) {
// TODO Auto-generated method stub
return null;
}
}
package generic;
public interface GInter <N1, N2>{
N1 add(N1 data1, N1 data2);
N1 sub(N1 data1, N2 data2);
N2 mul(N2 data1, N2 data2);
}
컬렉션 프레임워크(Collection Framework)
: 많은 데이터를 쉽고 효과적으로 관리할 수 있는
표준화된 방법을 제공하는 클래스의 집합
1. List extends Collection
구현된 클래스
- Vector
- ArrayList
컬렉션 클래스 중 가장 많이 사용되는 클래스
배열이 인덱스를 이용해서 값을 저장한다.
인덱스를 이용해서 배열 요소에 빠르게 접근 가능하지만
크기를 늘리기 위해서는 새로운 배열을 생성하고
기존의 값들을 옮겨야 하므로 상대적으로 느리다.
* Collections : 다양한 자료구조 메소드가 선언된 클래스
- LinkedList
2. Set extends Collection
3. Map
List, Collection, Set은 인터페이스다.
?) Integer인 타입으로 받을 때, remove애서 new한 객체를 삭제하는데.
값이 2개 이상인 객체의 경우 객체를 선언할 때 equals와 hashCode를 재정의 하는데
Integer은 재정의된 상태인지?
package collection;
import java.util.ArrayList;
import java.util.Collections;
public class ArListTest {
public static void main(String[] args) {
ArrayList<Integer> dataList = new ArrayList<>();
dataList.add(10);
dataList.add(80);
dataList.add(90);
dataList.add(30);
dataList.add(20);
dataList.add(50);
dataList.add(40);
System.out.println(dataList.size());
// for (int i = 0; i < dataList.size(); i++) {
// System.out.println(dataList.get(i));
// }
// for(int data : dataList) {
// System.out.println(data);
// }
//90을 900으로 수정
int index = dataList.indexOf(90);
if(index != -1) {
System.out.println(dataList.set(index, 900));
System.out.println(dataList);
}else {
System.out.println("찾는 값이 없습니다.");
}
//30 삭제
index = dataList.indexOf(30);
if(dataList.remove(new Integer(30))) {
System.out.println("삭제 성공");
System.out.println(dataList);
}
// if(index != -1) {
// System.out.println(dataList.remove);
// }
Collections.shuffle(dataList);
System.out.println("===섞은 후===");
System.out.println(dataList);
System.out.println("===정렬===");
Collections.sort(dataList);
System.out.println(dataList);
System.out.println("===좌우 반전===");
Collections.reverse(dataList);
System.out.println(dataList);
//50 뒤에 있는 정수 출력
index = dataList.indexOf(50);
if(index != -1) {
if(index+1 != dataList.size()) {
System.out.println(dataList.get(index + 1));
}
}
}
}
로그인 로그아웃
package collection;
import java.util.ArrayList;
public class User {
ArrayList<ArrayList<String>> users = new ArrayList<>();
private final int KEY = 3;
private static ArrayList<String> session;
public static ArrayList<String> getSession() {
return session;
}
public static void setSession(ArrayList<String> session) {
User.session = session;
}
//회원가입(아이디, 패스워드, 이름)
public void join(ArrayList<String> user) {
user.set(1, encrypt(user.get(1)));
users.add(user);
}
//로그인(아이디, 패스워드)
public boolean login(String id, String pw) {
for (ArrayList<String> user : users) {
if(user.get(0).equals(id)) {
if(decrypt(user.get(1)).equals(pw)) {
session = user;
return true;
}
}
}
return false;
}
//로그아웃
public void logout() {
session = null;
}
//암호화
public String encrypt(String pw) {
String en_pw = "";
for (int i = 0; i < pw.length(); i++) {
en_pw += (char)(pw.charAt(i) * 3);
}
return en_pw;
}
//복호화
public String decrypt(String pw) {
String de_pw = "";
for (int i = 0; i < pw.length(); i++) {
de_pw += (char)(pw.charAt(i) / 3);
}
return de_pw;
}
}
package collection;
import java.util.ArrayList;
import java.util.Scanner;
public class Index {
public static void main(String[] args) {
int choice = 0;
Scanner sc = new Scanner(System.in);
User u = new User();
ArrayList<String> user = null;
String id = "";
String pw = "";
while(true) {
System.out.println("1.회원가입\n2.로그인\n3.나가기");
choice = sc.nextInt();
if(choice == 3) {
break;
}
switch(choice) {
case 1:
user = new ArrayList<>();
System.out.print("아이디 : ");
user.add(sc.next());
System.out.print("비밀번호 : ");
user.add(sc.next());
System.out.print("이름 : ");
user.add(sc.next());
u.join(user);
break;
case 2:
System.out.print("아이디 : ");
id = sc.next();
System.out.print("비밀번호 : ");
pw = sc.next();
if(u.login(id, pw)) {
System.out.println(User.getSession().get(2) + "님 환영합니다.");
while(true) {
System.out.println("1.로그아웃");
choice = sc.nextInt();
break;
}
}
break;
}
}
}
}
To Do LIST
① up casting 부분 다시 공부
② get,set여는 방법 (alt + shift + s -> r)
③ remove(Object 0)는 객체를 넣는건데
객체가 값 하나만 존재하는게 아닐 때는 포함되는 모든 경우를 지운다 ? 이런 얘기인지?
A) 위의 경우에는 타입이 Integer(int 값을 가진 클래스)였기 때문에 int인 숫자를 넣었지만
예를 들어, 타입이 User(생성자가 String user_name, int user_num)인 경우,
equals와 hashCode를 재정의하고 remove(new User(user_name,user_num))를 해서 사용..?
④ -1은 마지막 인덱스라는 의미. 어떻게 사용할 때 ?
⑤ String은 왜 빠른 for문에서 사용이 불가능한지.
A) String은 배열인 값을 가지고 있지만 자체로는 타입이기 때문이다.
String을 배열로 만들어서 사용하기 위해선 char배열로 만들어주는 메소드를 이용해야함.
⑥ 인터페이스끼리 상속가능.
'JAVA' 카테고리의 다른 글
[WEB]DAY21_MVC(소프트웨어 디자인 설계 패턴) (0) | 2020.04.09 |
---|---|
[WEB]DAY20_Set(HashSet), Map(HashMap) (0) | 2020.04.09 |
[WEB]DAY17_SVN, 설계 패턴 (0) | 2020.04.07 |
[WEB]DAY16_마크 인터페이스, 예외처리, API, Javadoc, Object 클래스 (0) | 2020.04.03 |
[WEB]DAY15_ 다중 상속, 내부 클래스, 익명 클래스 (0) | 2020.03.16 |