[멀캠|Java] 5일차 수업
KB IT’s Your Life 4기 - Java 5일차
List, Set
- 컬렉션 : 값만 저장 (List, Set)
- Map : key, value 저장
package day_05;
import java.util.ArrayList;
public class ListExam {
public static void main(String[] args) {
//회원이름관리
//List - 순서 지원 O 중복 저장 O
ArrayList<String> names = new ArrayList<String>();
names.add("홍길동");
names.add("김길동");
names.add("박길동");
System.out.println(names); // 여기 나온 출력 값은 내부적인 toString()임.
names.add(1,"한길동");
System.out.println(names); // [홍길동, 한길동, 김길동, 박길동]
//remove 값을 지우고 반환(String)
String r = names.remove(2); //remove(index) or remove(value)
System.out.println(r); // 김길동
System.out.println(names); // [홍길동, 한길동, 박길동]
//값을 모두 지움.
names.clear();
System.out.println(names); // []
}
}
Interface, Collection API
package day_05;
import java.util.HashSet;
import java.util.Set;
public class SetExam {
public static void main(String[] args) {
Set<String> s = new HashSet<String>();
HashSet<String> hs = new HashSet<String>();
//객체의 형변환
//타입의 메서드만을 호출할 수 있음. 타입을 중요시 여겨야함.
수영선수 s1;
s1 = new 박태환선수();
야구선수 b1;
// 박태환선수 class에 implements가 수영선수밖에 없다면, 에러 발생.
b1 = new 박태환선수();
박태환선수 bt = new 박태환선수();
수영선수 s11;
s11 = bt;
// s1에는 swimming만 있음
s11.swimming();
야구선수 b11;
b11 = bt;
// b1에는 공던지기만 있음
b11.공던지기();
// bt에는 공던지기, swimming이 모두 있음
bt.swimming();
bt.공던지기();
}
}
//동호회에 가입하려면 특정 능력이 꼭 있어야 가입 가능. interface는 동호회와 같음 ex. 수영동호회 - 수영할 줄 앎.
//수영 선수라면, swimming이라는 기능은 반드시 있어야 해.
interface 수영선수 {
public void swimming();
}
interface 야구선수 {
public void 공던지기();
}
class 박태환선수 implements 수영선수, 야구선수 {
// interface에 따라 swimming 함수가 해당 class 내부에 꼭 있어야한다.
public void swimming() {
System.out.println("수영하기");
}
// interface에 따라 공던지기 함수가 없으면 에러 발생
public void 공던지기() {
System.out.println("공던지기");
}
}
Comparable, Comparator
- Comparable
- 딱 한 가지 기준으로 비교(ex.정렬) 가능함.
- 비교대상이 되어 비교 당함.
- ex.MyMember안에 Comparable하면 비교대상이 됨.
package day_05;
import java.util.Arrays;
public class CompareExam {
public static void main(String[] args) {
MyMember[] mems = new MyMember[3];
int count = 0; //객체 저장 위치 = 저장 개수
mems[count++] = new MyMember("길동이", 33);
mems[count++] = new MyMember("길동김", 25);
mems[count++] = new MyMember("길동박", 35);
//배열 정렬 : Arrays.sort(배열)
System.out.println("** 정렬 후 **" );
Arrays.sort(mems);
for (int i = 0; i < count; i++) {
System.out.println(mems[i]);
}
}
}
- Comparator(비교기)
- 배열에서 2개씩 가져다가 비교함.
//문자열에 대한 공부
package day_05;
public class StringExam {
public static void main(String[] args) {
System.out.println('가' < '나'); //한글자씩은 대소비교 가능
// System.out.println("가"<"나"); 문자열은 객체이기 때문에 오류 발생
System.out.println("a".compareTo("b")); //문자열은 따로 compareTo라는 함수를 이용해 비교 가능.
System.out.println("ab".compareTo("b")); //음수 > 사전순, ab먼저옴.
System.out.println("아버지".compareTo("어머니")); //음수
System.out.println("홍길동".compareTo("박길동")); //양수 > 박길동 먼저옴.
}
}
- Comparator 예제
package day_05;
import java.util.Arrays;
import java.util.Comparator;
public class CompareExam {
public static void main(String[] args) {
MyMember[] mems = new MyMember[3];
int count = 0; //객체 저장 위치 = 저장 개수
mems[count++] = new MyMember("나길동이", 33);
mems[count++] = new MyMember("가길동김", 25);
mems[count++] = new MyMember("다길동박", 35);
//배열 정렬 : Arrays.sort(배열)
System.out.println("** 정렬 후 **" );
Arrays.sort(mems, new NameComparator());
for (int i = 0; i < count; i++) {
System.out.println(mems[i]);
}
}
}
package day_05;
import java.util.Comparator;
/** 이름 기준 정렬기 */
public class NameComparator implements Comparator<MyMember>{
@Override
public int compare(MyMember o1, MyMember o2) {
return o1.getName().compareTo(o2.getName()); //문자열 가~하
//return o1.getAge() - o2.getAge(); //숫자 오름차순
//return o2.getAge() - o1.getAge(); //숫자 내림차순
}
}
java.lang(String, Object, Wrapper class)
- String
//string 비교
String s1 = "abc"; //Method영역에 딱 하나 "abc"가 생성됨.
String s2 = "abc"; //s1과 같은 곳을 가리킴
String s3 = new String("abc"); // heap영역에 "abc"가 생성됨.
String s4 = new String("abc"); // heap영역에 "abc"가 생성됨. (s3와 다른 주소임.)
System.out.println("s1=s2 " + (s1 == s2)); //주소를 비교
System.out.println("s1=s2 " + (s3 == s4));
System.out.println("s1=s2 " + (s1 == s3));
System.out.println("s1=s2 " + (s1.equals(s2))); //값의 내부 문자열 비교
System.out.println("s1=s2 " + (s3.equals(s4)));
System.out.println("s1=s2 " + (s1.equals(s4)));
497page에 보면 객체 동등비교를 위해 따로 equals를 오버라이딩해야한다.
- Object 클래스 extends를 하지 않으면 무조건 extends Object를 붙여서 직간접적인 자식들이 된다. 그래서 Object 안에 toString()메서드가 존재해서 다 쓸 수 있는 것이다.
-롬복
import lombok.Data; @Data
getter, setter을 안해도 사용 가능
@NoSrgsCosturctor
기본생성자를 포함함
등등… @— 라고 작성만 해주면 lombok에서 알아서 생성해준다.
-String
package day_05;
public class StringExam2 {
public static void main(String[] args) {
String s = "홍길동";
String s2 = "멀티캠퍼스";
System.out.println(s.length()); //문자열 길이
System.out.println(s.charAt(0)); //문자 추출
System.out.println(s2.indexOf("캠퍼스")); //문자||문자열 검색
System.out.println(s.startsWith("홍")); //boolean; 특정 글자로 시작?
System.out.println(s.endsWith("동")); //boolean; 특정 글자로 끝? (ex. pdf, jpg.. 등 파일 확장자 찾을 때 주로 이용)
String s3 = "10,20,30";
String[] split = s3.split(","); // String 반환
System.out.println(split[0]);
String s4 = "abcd";
String s5 = s4.toUpperCase();
System.out.println(s4.toUpperCase()); //모두 대문자로 바꾸기 <->toLowerCase
System.out.println(s4 == s5); //false > String은 불변객체. 한 번 만들어지면, 내부 값 변경이 불가하다.
//문자열 변경 메서드 실행 결과로 새로운 문자열을 반환한다.
}
}
StringBuilder sb = new StringBuilder();
package day_05;
public class StringExam3 {
public static void main(String[] args) {
// Stringbuilder: 고속 문자열 처리
String s = "0123456789";
String s2 = "";
//실행시간
long start = System.currentTimeMillis();
for (int i = 0; i < 5000; i++) {
s2 = s2 + s; //string객체가 불변 객체로 새로운 메모리를 사용해서 시간이 오래걸림.
}
System.out.println(s2);
long end = System.currentTimeMillis();
System.out.println("실행시간: " + (end - start));
////////
StringBuffer ssb = new StringBuffer(); //화장실이 급할 때, 문 두들기고 있으면 기다림 (여럿이서 쓸때, 버퍼)
StringBuilder sb = new StringBuilder(); //화장실 급할 때, 그냥 들어감. (혼자서 쓸때, 빌더 (요즘은 단일작업임 이거!!))
long start2 = System.currentTimeMillis();
for (int i = 0; i < 5000; i++) {
sb.append(s);
}
System.out.println(sb.toString()); //StringBuilder는 string이 아니라 toString으로 불러와주기.
long end2 = System.currentTimeMillis();
System.out.println("실행시간: " + (end2 - start2));
}
}
포장클래스
package day_05;
import java.util.ArrayList;
public class WrapExam {
public static void main(String[] args) {
//박싱
int i = 5;
//Integer ii = new Integer(i);
Integer ii = i; //상단코드와 같은 코드임.- 오토박싱
String ss = ii.toString();
String ss2 = "200";
int k = Integer.parseInt(ss2);
//언박싱
int j = ii;
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(i);
}
}
과제 예시
도서판매점(Bookstore) 관리 프로그램을 작성
도서관리, 회원관리, 판매관리를 할 수 있는 프로그램을 작성한다.
도서: BookDto { isbn(도서번호), title, price } 회원: MemberDto { mno(멤버번호), name, tel } 판매: SaleDto { mno, isbn, quantity } 어떤 회원이 어떤 도서를 몇 권 사갔는가?
BookStoreService {
ArrayList
public BookStoreService(){ bookList.add(new BookDto(“123”, “자바기본”, “20000”)); } }