Archive

Java Day 16 제네릭,컬렉션

|

Java Day 16 제네릭,컬렉션


  1. 제네릭

    • Generic을 사용하면 타입 오류를 컴파일 과정에서 강하게 체크하여 미연에 방지 할 수 있다.
    • 타입 변환을 제거하여 프로그램 성능을 향상시킬 수 있다.
    //Generic을 사용하지 않은 경우
    ArrayList list = new ArrayList();
    list.add("안녕?");
    String str = (String) list.get(0); //명시적 타입변환이 필요
       
    //Generic을 사용한 경우
    ArrayList<String> list = new ArrayList<String>();
    list.add("안녕?");
    String str = list.get(0); //타입변환 필요 x
    
    • Generic 타입을 가지는 클래스와 인터페이스를 활용하여 타입변환을 최소화 할 수 있다.
    • 타입 파라미터는 일반적으로 대문자 한 글자로 표현한다, T, K, V 등등..
    public class Zoo<T> {
        private T t;
        public T get() {
            return t;
        }
        public void set(T t){
            this.t = t;
        }
    }
    //Generic 타입 Class의 사용
    Zoo<String> zoo = new Zoo<String>();
    zoo.set("fox");
    String str = zoo.get(); //fox 출력
       
    Zoo<Integer> zoo = new Zoo<Integer>();
    zoo.set(20);
    int age = zoo.get(); //20 출력
    
    • Generic 메소드는 매개 타입과 리턴 타입으로 타입 파라미터를 갖는 메소드다.
    • public <타입 파라미터=""> 반환형 메소드명 (타입 매개변수) {...}의 형태.


  2. 컬렉션 프레임워크

    • 자료구조를 바탕으로 java.util 패키지에서 제공하는 컬렉션과 관련된 인터페이스 및 클래스
    • 이들을 모아놓은 것이 컬렉션 프레임워크(Collection Framework)다.
    • 주요 인터페이스로는 List, Queue, Set, Map이 있다.

    인터페이스

    • List 인터페이스는 중복을 허용하고 순서가 있는 자료를 관리한다. FILO (First In Last Out), LIFO(Last In First Out)의 자료구조를 가진다.
    • Queue 인터페이스는 FIFO(First In First Out) 자료구조를 가진다.
    • Set 인터페이스는 중복을 허용하지 않고 순서가 없다. 집합 형태의 자료구조.
    • Map 인터페이스는 key-value 쌍으로 이루어져있고 key값은 중복 허용이 안된다.


  3. List 인터페이스

    • Stack, Vector, ArrayList 클래스가 있으며 물리적으로 배열과 같은 형태이지만 가변길이를 지원한다.
    • Vector와 ArrayList는 동일하게 기능하지만 Vector는 멀티 쓰레드 환경에서 동기화를 지원하나 성능면에서 ArrayList보다 떨어진다.
    • 주요 메소드는 너무 방대하므로 그때그때 구글링해서 사용하자..
    import java.util.*;
       
    public class StackEx{
    	public static void main(String[] args){
    		String[] group = {"1","2","3","4","5"};
    		Stack<String> stack = new Stack<>();
    		for(String n : group){
    			stack.push(n);
    		}
    		while(!stack.isEmpty()){
    			System.out.println(stack.pop());
    		}
    	}
    }//output : 5 4 3 2 1
    


  4. Set 인터페이스

    • HashSet, TreeSet 클래스가 있고 HashSet은 순서 없이 결과값을 출력하고 TreeSet은 결과값을 오름차순으로 정렬하여 출력한다.
    • 인덱스가 없기때문에 인덱스를 매개로 갖는 메소드가 없다. (당연한 말이지만)
    • 인덱스가 없어서 for문을 못돌리니깐 iterator 객체를 생성하여 요소를 순회 할 수 있다.
    import java.util.*;
       
    class Adata {
    	int x;
    	public Adata(int x){
    		this.x = x;
    	}
    	public void disp(){
    		System.out.println("x = "+x);
    	}
    }
    public class HashSetEx{
    	public static void main(String[] args) {
    		Adata ap = new Adata(1);
    		Adata bp = new Adata(2);
    		Adata cp = new Adata(3);
    		HashSet<Adata> hs = new HashSet<>(); //타입을 유추 할 수 있을때 제네릭의 생략 표현이 가능하다
    		hs.add(ap);
    		hs.add(bp);
    		hs.add(cp);
    		Iterator<Adata> ir = hs.iterator(); //순회자(반복자) 생성
    		while(ir.hasNext()){ //hasNext() : 다음 요소가 있으면 true 반환
    			ir.next().disp(); //next() : 다음에 있는 요소를 반환
    		}
    	}
    }//output : 3 1 2 출력 (순서가 없다)
    
    //TreeSet 활용 (오름차순)
       
    import java.util.*;
       
    public class TreeSetTest{
    	public static void main(String[] args){
    		TreeSet<String> ts = new TreeSet<String>();
    		ts.add("홍길동");
    		ts.add("고길동");
    		ts.add("나예리");
    		ts.add("다람이");
    		for(String str : ts){
    			System.out.println(str);
    		}
    	}
    }//output : 고길동, 나예리, 다람이, 홍길동
    


  5. Map 인터페이스

    • HashMap, HashTable, TreeMap(key값으로 정렬), Properties 클래스가 있다.
    • 대체로 키를 매개로 갖는 메소드가 많다.
    import java.util.*;
       
    public class MapEx{
    	public static void main(String[] args){
    		String[] msg = {"한국","미국","일본","중국","독일"};
    		HashMap<Integer,String> hm = new HashMap<>();
    		for(int i=0; i<msg.length; i++){
    			hm.put(i, msg[i]);
    		}
    		Set<Integer> keys = hm.keySet();
    			for(Integer n : keys){
    				System.out.println(hm.get(n));
    			}
    	}
    }//output : 한국 미국 일본 중국 독일
    


외에도 많은 클래스와 인터페이스, 메소드가 있지만 워낙 방대한 양이라 필요할 때 그때그때 찾아서 사용하자 !




참고 자료


이것이자바다

자바프로그래밍100% 실전가이드

KG아이티뱅크 자바 강의자료

2020-12-21 TIL

|

2020-12-21 TIL


  • 오늘 한 것
    1. 객체 응용문제 풀이 - 다 풀었다~~지난번 숙제처럼 알고리즘을 이용한 응용문제가 아니어서 비교적 쉽게 풀 수 있었다.
    2. 학원 비대면 수업 (패키지, 예외) - package, exception에 대한 기본 개념을 배웠다. exception은 예전 수업때부터 사용은 해왔어서 무엇인지는 알고 있었는데 정확히 어떤 때에 사용하는지에 대해 모호했는데 궁금증이 해소되었다.
    3. 블로그 포스팅 (java day15 정리, Javascript Day 6) - JS 옵셔널체이닝과 심볼 그리고 숫자형에 관련된 메소드와 프로퍼티에 대해 배웠다.
    4. 노마더코더 JS 유튜브 강의 - Javascript30 tutorial 끝냈으니 뭔가 좀 만들어볼까 하다가 노마드코더 보고 바닐라만을 활용한 클론코딩을 하나 하기로 했다. 라이브러리나 프레임워크 배우기 전에 자바스크립트 코어 공부를 좀 더 하고 싶기 때문.

  • 내일 할 것
    1. 이것이 리눅스다 Chapter 12 웹 서버 설치와 운영
    2. 학원 수업(15:30~22:00) 컬렉션, 제네릭
    3. 블로그 포스팅 (Java Day 16, Javascript Day 7)
    4. 노마더코더 JS 유튜브 강의

  • 끝으로

학원 수업이 아직 이론 위주가 많아서 시간이 남을때 개인공부좀 많이 해놔야겠다.

오늘의 한 줄 총평 : JS GOGO


JS Day 6 옵셔널 체이닝,심볼,숫자형

|

JS Day 6 옵셔널 체이닝,심볼,숫자형


  1. 옵셔널 체이닝

    • ?. 문법을 사용하며 왼쪽 평가대상에 값이 없어도 괜찮은 경우 사용한다.
    • ?. 왼쪽의 변수는 반드시 선언되어 있어야한다. (없으면 Error)
    • ?.왼쪽 평가대상의 값이 null, undefined인 경우 short-circuit 현상 발생
    • obj?.prop - obj에 값이 있으면 prop 반환, 아니면 undefined 반환
    • obj?.method() - obj에 값이 있으면 method() 호출, 아니면 undefined 반환
    • onj?.[prop] - obj에 값이 있으면 [prop] 반환, 아니면 undefined 반환
    • delete obj?.prop - obj에 값이 있으면 prop 삭제
    • 읽기와 삭제는 가능하지만 할당은 불가능하다.
    let zoo = {};
    console.log(zoo?.fox); // undefined 출력
    
    let zoo = {
      fox() {
        console.log("안녕?");
      },
      rabbit: 8,
    };
    
    zoo.fox?.(); // "안녕?" 출력
    
    let key = "rabbit";
    console.log(zoo?.[key]); // 8 출력
    


  2. 심볼

    • 유일한 식별자를 만들때 사용
    • 객체의 key값은 문자형, 심볼형만 가능
    • 심볼은 문자형으로 자동 형 변환이 이루어지지 않는다.
    //Symbol()로 심볼값을 만든다
    let key = Symbol();
    
    //Symbol(...) 괄호 안에 심볼 이름을 넣을 수 있다
    let key = Symbol("myKey");
    
    //심볼값은 이름이 같아도 동일하지 않다(유일성 보장) - 전역 심볼 제외
    let key1 = Symbol("foo");
    let key2 = Symbol("foo");
    
    console.log(key1 == key2); // false 출력
    
    //심볼을 출력 할 때는 .toString(), .description을 쓰자
    console.log(key1.toString()); //Symbol(foo) 출력
    console.log(key1.description); // foo 출력
    
    • 심볼은 for-in 반복문에서 배제된다.
    • Object.assign으로 객체를 복사하면 심볼도 같이 복사된다.
    • Symbol.for(key)로 레지스트리 안에 심볼을 생성 할 경우 이름이 같으면 동일한 심볼로 취급된다.
    • 전역심볼의 이름을 찾을때는 Symbol.keyfor(symbol)를 이용한다. 전역심볼이 아닐 경우 undifined 반환


  3. 숫자형

    • 0 대신 e
    let billion = 1e9; // 1000000000
    let minus = 1e-6; // 0.000006
    
    • number.toString(base) : base 진법으로 number를 바꿔서 문자형으로 반환
    let num = 15;
    console.log(num.toString(16)); // f
    console.log(num.toString(8)); // 17
    console.log(num.toString(2)); // 1111
    
    • floor, ceil, round, trunc
    //floor 내림
    let num = Math.floor(3.6); // 3
    let num = Math.floor(-2.1); // -3
    
    //ceil 올림
    let num = Math.ceil(3.6); // 4
    let num = Math.ceil(-2.1); // -2
    
    //round 반올림
    let num = Math.round(3.6); // 4
    let num = Math.round(-2.7); // -3
    
    //trunc 무시
    let num = Math.trunc(3.6); // 3
    let num = Math.trunc(-2.7); // -2
    
    • toFixed(n) : 소수점 반올림하여 n번째 자리까지 표기해서 문자형으로 반환
    //toFixed()
    let num = 3.141592;
    console.log(num.toFixed(2)); // 3.14
    
    • parseInt(), parseFloat() : 문자와 숫자가 섞여있어도 쓸 수 있고, 숫자만 반환한다
    console.log(parseInt("100px")); // 100
    console.log(parseFloat("4.5rem")); // 4.5
    
    • isFinite() : 숫자면 true 반환, 숫자가 아니거나 ±Infinity면 false 반환
    console.log(isFinite("foo")); // false
    console.log(isFinite(35)); // true
    




참고 자료


JAVASCRIPT.INFO

Java Day 15 패키지,예외

|

Java Day 15 패키지, 예외


  1. 패키지

    • 패키지는 서로 관련 있는 클래스, 인터페이스를 묶는 것으로 일종의 Library이다. * 패키지의 물리적 형태는 파일 시스템의 폴더.
    • 클래스명이 같더라도 패키지명이 다르면 다른 클래스로 인식.
    • 패키지는 모두 소문자로 작성
    • 제일 상단에 package 상위패키지.하위패키지; 으로 선언한다.
    • 다른 패키지의 클래스를 사용 할 때는 import 패키지명.클래스명;으로 불러온다.


  2. 예외

    • 물리적 고장으로 발생하는 Error 이외에 사용자의 잘못된 조작, 개발자의 잘못된 코딩으로 인해 발생하는 Exception을 예외라고 한다.
    • 예외에는 Compile시 체크를 하는 일반 예외와 체크를 하지 않는 Runtime 예외가 있다.
    • Runtime Exception은 Compile에서는 걸리지 않지만 실행시 오류가 발생한다.
    • Runtime 예외에는 NullPointerException, ArrayIndexOutOfBoundsException, NumberFormatException 등이 있다.
    • throw : 예외 발생, throws : 예외 전가, try-catch : 예외 처리라고 한다.
    • 예외의 최상위 클래스는 Exception, 에러의 최상위 클래스는 Error.
    • Exception, Error의 상위클래스는 throwable이며 throwable의 상위클래스는 object.


  3. 예외 처리

    • 예외처리는 프로그램의 비정상 종료를 막고 실행상태를 유지하게 해줌.
    • try-catch문의 catch 블록은 개수제한이 없지만 위쪽에 하위클래스, 아래쪽에 상위클래스가 와야한다.
    /*
    *	try 블록 : 예외가 발생가능한 코드
    *	catch 블록 : 예외 발생시 처리할 코드, 복수기입 가능
    *	finally 블록 : 예외가 있든 없든 무조건 실행
    */
    try {
    	System.out.println(0/0); // 예외 발생    
    } catch (ArithmeticExcepiton ae){
    	System.out.println("Arithmetic 예외");
    } catch (Exception e){
        System.out.println("예외 발생"); //실행되지 않는다
    } finally (){
        System.out.println("종료"); //예외 상관없이 무조건 실행
    }
    


  4. 예외 발생 & 전가

    • 메소드 내부에서 예외가 발생 할 수 있을때 throws로 예외를 떠넘길 수 있다.
    • throws가 붙은 메소드는 try 블록 내에서 호출되어야 한다.
    public void test() throws Exception {
        throw new Exception(); //예외 발생시키기
    }
    public void test2() {
        try {
            test();
        } catch(Exception e){
            System.out.println("예외 발생");
        }
    }
    




참고 자료


이것이자바다

자바프로그래밍100% 실전가이드

KG아이티뱅크 자바 강의자료

2020-12-20 TIL

|

2020-12-20 TIL


  • 오늘 한 것
    1. 객체 응용문제 풀이 - 18번까지 완료
    2. Javascript30 Tutorial Day 30 - 두더지잡기 게임 구현, Math.random() 메소드를 이용하여 두더지가 불규칙적으로 각 구멍에서 나오게 만든다. 두더지를 클릭하면 스코어가 오르는 게임. 재밌네 ㅎ.. 드디어 javascript30 tutorial을 완료했다. js 맛뵈기로 체험을 위해 시작한 튜토리얼이었는데 꽤나 쓸만한 것들을 많이 건진 느낌이다. js 기초에 대한 공부가 조금 더 이루어지면 지난 튜토리얼들을 복기하면서 완전히 내 것으로 흡수하는 작업에 들어가야겠다.

  • 내일 할 것
    1. 객체 응용문제 풀이(feat.숙제)
    2. 학원 수업(15:30~22:00) 패키지, 예외처리
    3. 블로그 포스팅 (Java Day 15, Javascript Day 6)

  • 끝으로

오늘은 공부시간이 짧았다. 반성하자.

오늘의 한 줄 총평 : 내일부터 다시 Burning!