ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [TIL] Java 기초 문법에 대하여
    TIL(Today I Learned) 2022. 11. 7. 20:58

    * 20221107의 회고

     

       이번주는 내배캠에서 새로운 수업이 시작되었다. 저번주까지는 미니팀프로젝트를 진행하였고, 오늘부터는 java와 python의 기초 문법과 자료구조, 알고리즘을 배우는 시간을 갖는다.

       나는 내배캠에 들어오기 전까지 대부분 java 공부만 진행하고 들어왔기 때문에 강의 앞쪽의 기초적인 문법 설명 부분은 배속으로 빨리빨리 들었다. 전반적으로 java 기초에 대해 복습하는 시간을 가지게 되어 좋았다. 그리고 강의 뒷부분 부터는 내가 알고는 있다고 생각하지만 설명하라면 헷갈리거나, 정확히 알고있지 않는 부분이 나와서 이 부분 위주로 회고를 진행하려 한다.

     

    <오버로딩과 오버라이딩>

     

    - 오버로딩 : 한 클래스 내에 동일한 이름의 메서드를 여러개 정의. 매개변수의 수나 타입이 달라야함( = 중첩)

    - 오버라이딩 : 부모 클래스의 메서드와 이름, 매개변수의 수, 타입이 정확히 일치해야함( = 치환)

     

     

    <접근제어자(접근한정자) : access modifier>

     

    - private : 같은 클래스 내에서 접근 가능

    - default : 같은 패키지 내에서 접근 가능

    - protected : 같은 패키지 내에서, 다른 패키지의 상속받은 자식클래스에서 접근 가능

    - public : 어디서든 접근 가능

    - 접근제어자의 범위 :  private < default < protected < public

     

     

    <추상클래스와 인터페이스>

     

    - 추상메서드 : 선언부만 존재하고 구현부가 존재하지 않는 메서드. 따라서 자식클래스에서 상속받은 추상 메서드를 모두 구현해야 함.

    - 추상클래스 : 추상클래스는 추상메서드 외에 다른 멤버변수나 일반메서드를 가질 수 있음

    - 인터페이스 : 추상메소드와 상수만으로 구성된 추상클래스, 다른 멤버변수나 일반메서드 가질 수 없음 -> 더욱 완벽한 추상화 제공. implements를 이용하여 구현.

     

     

    <예외처리>

     

    - 예외처리의 목적 : 실행 중 프로그램이 비정상적으로 종료하면 안되므로 그게 예상되는 곳에는 예외를 처리해줘서 비정상적인 종료를 막는다. 또한 개발자에게 어떤 곳에서 에러가 발생했는지 알려준다.

    - 모든 예외클래스는 Throwable의 자손 클래스

     

    https://media.vlpt.us/images/codepark_kr/post/a70025be-d97d-4ba481de-bf9b8fe48d2b/ExceptionClassHierarchy.png

    - try-catch-finally 

          - try 블록 : 예외가 발생할 가능성이 있는 구문을 블록 안에 넣어준다.

          - catch 블록 : try 블록 바로 다음에 위치해야한다. catch 블록의 매개변수는 예외 객체로서, 예외에 관한 정보를 저장하고 있다. 예외 객체의 타입은 반드시 Throwable 클래스의 하위 클래스여야 한다. try 블록에서 예외가 발생되면 JVM은 즉시 수행을 중단하고 발생된 예외의 타입에 따라 적절한 catch 블록을 수행한다.(여러개의 catch블록 존재 가능)

          - finally 블록 : 필요에 따라 선택적으로 사용되며, 예외의 발생과 상관 없이 무조건 수행되는 블록이다.

     

    - try-with-resource

          -try-catch-finally 구문에서는 사용되었던 자원을 끝난 후에 닫아줘야 하는 과정이 필요한데, 이 구문을 사용하면 try를 벗어나는 순간 자동으로 close()가 호출된다. -> 따로 닫아주는 과정 필요X

          - try()안의 입출력 스트림을 생성하는 로직을 작성할 때, 해당 객체가 AutoClosable 인터페이스를 구현한 객체여야 한다.(AutoClosable 인터페이스에는 예외가 발생할 경우 close() 메서드를 호출하기로 정의되어 있기 때문)

     

    ex) try (FileOutputStream out = new FileOutputStream("test.txt")) {

               //FileOutputStream은 AutoClosable인터페이스를 구현한 객체

               // test.txt file 에 Hello Sparta 를 출력

               out.write("Hello Sparta".getBytes());

               out.flush();

         } catch (IOException e) { e.printStackTrace();

         }

     

    - 메서드에서의 예외 선언 : throws 사용. throws 사용 시 이 메서드를 호출한 쪽에서(caller) try-catch를 처리해줘야함.

     

     

    <날짜와 시간 다루기>

     

    - java.time 패키지

          - LocalDate.now() -> 현재 날짜 알려줌 ex) 2022-11-07

          - LocalTime.now() -> 현재 시간 알려줌 ex) 20:19:32.910275200(밀리초)

          - LocalDateTime.now() -> 현재 날짜와 시간 알려줌 ex) 2022-11-07T20:19:32.910275200

          - LocalDate.of(2021, 03, 29) -> 내가 지정한 날짜 알려줌 ex) 2021-03-29

          - LocalTime.of(22,50,55) -> 내가 지정한 시간 알려줌 ex) 22:0:55

           => now() : 현재의 시간과 날짜 / of() : 지정하는 시간과 날짜

     

    - 시간과 날짜의 형식 수정 

          - DateTimeFormatter 클래스 사용.

            ex) DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT);

                  String shortFormat = formatter.format(LocalTime.now());

                  System.out.println(shortFormat); //오후 8:29 출력 (SHORT : 오전/오후 출력)

            ex) DateTimeFormatter newFormatter = DateTimeFormatter.ofPattern("yyyy년MM월dd일");

                  String myDate = newFormatter.format(LocalDate.now());

                  System.out.println(myDate); // 2022년11월07일 출력

     

    - 날짜와 시간의 차이 계산 : Period 클래스 사용

       ex) LocalDate today = LocalDate.now(); //2022-11-07

             LocalDate birthday = LocalDate.of(2022, 8, 9);

             Period period = Period.between(today, birthday); //today와 birthday 사이의 달 수 와 일수를 계산

             System.out.println(period.getMonths()); //-2 출력 ->2 달 차이

             System.out.println(period.getDays()); //-29 출력 -> 29일 차이

      

     

    <컬렉션(Collection)>   

     

    - 컬렉션 : 자바에서 자료구조를 표현하는 인터페이스. 전체적으로 자료구조를 통틀어 컬렉션이라 함

    - 컬렉션 프레임워크 : 다수의 데이터를 다루기 위한 자료구조를 표현하고 사용하는 클래스의 집합

     

          1. List : 순서가 있는 데이터 집합, 데이터의 중복을 허용. ex) ArrayList, LinkedList, Stack 등

              - add() : 값을 넣음

              - Collections.sort() : 오름차순으로 값 정렬

              - size() : 리스트의 크기를 리턴

              - remove() : 값을 제거

              - get() : 값을 가져와서 리턴

     

          2. Set : 순서가 없는 데이터 집합, 데이터의 중복 허용하지 않음. ex) HashSet, TreeSet 등

              - add() : 값을 넣음

              - remove() : 값을 제거

              - clear() : 모든 값들을 제거

     

          3. Map : key 와 value의 쌍으로 이루어진 데이터 집합. python, js의 딕셔너리와 같음. 순서가 유지되지 않고 key는                         중복을 허용하지 않지만 value는 중복을 허용

              - put(key값, value값) : 값을 넣음

              - remove() : 값을 제거

              - clear() : 모든 값들을 제거 

     

          4. Stack : 마지막에 넣은 데이터를 먼저 꺼냄. Last In First Out -> LIFO (페이지의 앞페이지 이동, 뒤로가기에 이용)

              - push() : 값을 넣음

              - pop() : 값을 꺼내고 값을 리턴

              - peek() : 값을 꺼내진 않고 제일 위의 값만 리턴

              - contains(a) : a를 포함하면 true 리턴 

              - size() : 스택의 사이즈 리턴

              - isEmpty : 스택이 비었으면 true 리턴

     

          5. Queue : 먼저 넣은 데이터를 먼저 꺼냄. First In First Out -> FIFO

              - add() : 값을 넣음

              - poll() : 값을 꺼내어 리턴

              - peek() : 값을 꺼내지 않고 값을 리턴

     

          6. ArrayDeque : Queue와 달리 양 끝에서 삽입과 삭제가 이루어지는 자료구조

              - addFirst() : arraydeque의 앞에 값을 삽입, 큐의 크기가 문제있을 때 exception 반환

              - addLast() : arraydeque의 끝에 값을 삽입, 큐의 크기가 문제있을 때 exception 반환

              - offerFirst() : arraydeque의 앞에 값을 삽입, 큐의 크기가 문제있을 때 false 반환

              - offerLast() : arraydeque의 끝에 값을 삽입, 큐의 크기가 문제있을 때 false 반환

              - removeFirst() : 첫번째 값을 제거하면서 그 값을 리턴

              - removeLast() : 마지막 값을 제거하면서 그 값을 리턴

              - size() : arraydeque 의 사이즈 리턴

              - pollFirst() : 첫번째 값을 반환 및 제거하면서 그 값을 리턴

              - pollLast() : 마지막 값을 반환 및 제거하면서 그 값을 리턴

              - peekFirst() : 첫번째 값을 제거하지 않고 그 값을 리턴

              - peekLast() : 마지막 값을 제거하지 않고 그 값을 리턴

     

     

       우선 여기까지가 강의를 들으면서 머릿속에서 어느정도 정리가 된 부분이다. 그러나 강의 뒷부분의 스트림, 람다, 제네릭, 네트워킹 부분은 한번에 이해하기가 힘들었다. 이 부분은 다음시간에 다시 들어야 할 것 같고 강의자료 외에 다른 자료들도 찾아보면서 정리해봐야 겠다. 오늘 하루도 고생 많았고 내일 새로운 팀원들과 다시 힘차게 달려나가보자!

          

Designed by Tistory.