본문 바로가기

[2016 - 2019] 학부 정리/Java

18.01.12 자바 - 필기01 미완성

[오전]

오늘 : api, jdbc ~

-------------------------------------------------------------------------------------------------------------------------------------------------------

[복습]

엊그제 : 3가지 중요성(다형성 중요-업캐스팅,다운캐스팅), 인터페이스, 예외, 스레드 모두 업캐스팅! 중요하니까 제대로 확인하기

어제 : final, 접근제한자(public, private..), 예외처리-호출부분에서 처리하는게 좋음(미룸), 디버거 사용법, 스레드, 자바는 다중상속이 불가

        대신 인터페이스로 상속효과를 내고 있다(상속받은 스레드가 움직이는게 아닌 우리가 원하는대로 스레드에 던짐).

        트랜잭션 구현 - 하나의 최소 업무 단위(sychronized : 메소드 단위, 블록 단위, ATM - 모니터 - 동기화), String class(메모리누수)

  메모리 데이터의 크기변화로 메모리의 fragmentation을 많이 생기게 함, 복제본 생성, 가비지컬렉션 으로 제거 그러나 loop돌리면

  문제생김. => 그래서 생긴게 StringBuffer(동기화 처리되어 있음), StringBuilder(싱글스레드에서 속도가 중요할때, 동기화가 처리안되어    

 있음) 사용 

시험 : index -> pointer아님

-------------------------------------------------------------------------------------------------------------------------------------------------------

[오늘]

1. StringBuilder 예제 따라치기- 이것이자바다 p516

2. p506, p507예제

   String firstNum = ssn.substring(0, 6); // 0부터 6개 라는 의미

   //자바에서는 뒤에오는 첨자-1 값까지 의미한다.

   String secondNum = ssn.substring(7); //7번째 부터~ 끝까지

3. 공백 잘라내기 trim()

4. String.valueOf -> 편한방법으로 알아서 쓰셈

   String str1 = String.valueOf(10);

   System.out.println(str1);

5. Split, StringTokenizer -> 문자열을 원하는 부분을 잘라냄 (문자열과 구분자)

    StringTokenizer str = new StringTokenizer("강백호,서태웅,채치수,정대만", ",");


while (str.hasMoreTokens()) {

System.out.println(str.nextToken());

}

//for문으로 돌리지 말고 while문에서 먼저 확인후 찍어내기, for문으로 하니 에러남

//회사에서는 자바,디비 버전 확인하기 , 데이터가 많아서 쉽게 못바꿈 차이 확인하면서 공부하셈


자바8까지

//BoxedPrimitives(Wrapper Class) : 기본 자료형

Integer i = new Integer(10); // deprecated : 기존에 이미 써서 남겨는 놨지만 되도록 쓰지마셈!


자바5부터~ NewFeature

//Auto Boxing

Integer i2 = 10; //기본자료형 -> 클래스 타입 : Auto Boxing

int i3 = Integer.valueOf(i2);


//Auto Unboxing

int i4 = i2;


Object obj = 10;

int i5 = (Integer) obj; // ~java6, 형변환 할때 기본 자료형 말고 Boxed사용할것

int i6 = (int) obj; // ~java7


6. 컬렉션 프레임워크(List, Set, Map) 2권 - p.722

  1. 제네릭 -> : <> 쓰면 좋음, 언제? | ArrayList

package api;


import java.util.ArrayList;


public class ApiTest10 {

public static void main(String[] args) {

ArrayList list = new ArrayList();

list.add("정희수");

list.add("김종혁");

list.add("문자영");

list.add(10) //다른 타입도 들어감

for(int i=0; i<list.size(); i++) {

System.out.println(list.get(i));

}

}

}

//이렇게 다른 타입 다 안받고 싶을때, 성능이 좋은 for each문 쓸수없음


ArrayList<String> list = new ArrayList<>(); //앞에 String이 뒤에 따라옴

이렇게 타입을 주면 문자열만 들어가게 된다. for each 가능 따라서 제네릭쓰면 좋음(자바5부터~)

list.add("홍길동");

list.add("김길동");

list.add("문길동");

//list.add(10); ->에러


for(String str : list) {

System.out.println(str);

} //순차적으로 집어넣은대로 나옴, 배열을 클래스화 한 것 


--------------------------------------ArrayList를 써보기


import java.util.ArrayList;


public class ApiTest10 {

public static void main(String[] args) {

ArrayList<String> list = new ArrayList<>();

printList(list); 

list.add("정길동");printList(list);

list.add("김길동");printList(list);

list.add("문길동");printList(list); //제일 마지막에 넣는메소드 :add()

list.set(1, "원빈");printList(list); //수정

list.remove(0); printList(list); //삭제

System.out.println(list.get(1)); //특정값만 불러 오고 싶을땐 get()

}


private static void printList(ArrayList<String> list) { 

// 클래스 타입이니까 주소만 가져옴(주소복제) 값복제가 되면 원본은 안바뀌는데 참조변수는 둘다 변함

// 값복제 : call by value , 주소 복제 : call by reference

for (String str : list) {

System.out.print(str + "\t");

}

System.out.println();

}

}

-------------------------------------------------------------------------------------------------------------------------------------------------------

- ArrayList 예제

----------------

package api;


public class Account {

private int money; // 잔액

private String bankname; // 계좌이름

private String no; // 계좌번호


//생성자

public Account(int money, String bankname, String no) {

super();

this.money = money;

this.bankname = bankname;

this.no = no;

}


public int getMoney() {

return money;

}


public void setMoney(int money) {

this.money = money;

}


public String getBankname() {

return bankname;

}


public void setBankname(String bankname) {

this.bankname = bankname;

}


public String getNo() {

return no;

}


public void setNo(String no) {

this.no = no;

}


public String toString() {

return bankname + "의 계좌번호 " + no + "의 잔액은 " + money;

}

}


---------------

import java.util.ArrayList;

import java.util.List;


public class ApiTest11 {

public static void main(String[] args) {

// Arr -> List 업캐스팅

List<Account> list = new ArrayList<>();


// 바로add했기때문에 가비지X

list.add(new Account(1000000, "국민은행", "123-123-1234"));

list.add(new Account(2000000, "미래에셋", "456-456-4564"));

list.add(new Account(5000000, "농협", "323-123-1234"));

list.add(new Account(6000000, "신협", "343-123-1234"));

list.add(new Account(3000000, "우리은행", "49-973-1734"));


for (Account account : list) {

System.out.println(account);

}

}

}

---------------------------------------------------------------------------------------------------------------------------------------------------