[TIL] 240129

Geehyun(장지현)·2024년 1월 30일

TIL

목록 보기
24/70
post-thumbnail

Today

  • Do it! 자바 완전 정복

    • Java (~추상클래스와 인터페이스) 시험 진행
    • 예외처리 부분 실습 진행
    • 예외처리 리소스 자동/수동 해제 구문
    • 람다식 수업진행
    • 제네릭 수업진행
    public class Main {
        public static void main(String[] args) {
            A a1 = null;              // 힙에 아직 아무것도 없고 참조변수가 가르키는 번지수가 아직 없는상태
            // 객체를 동적으로 할당해야할 때가 있음. 아직 객체를 생성하지 않고 있다가 추후 동적으로 할당해줘야할 때 사용될 수 있음.
            //A a2 = new A();           // 힙에 있는 A객체의 번지수를 참조변수에 할당한 상태
    
            //리소스 수동 해제
            try {
                a1 = new A("리소스");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if(a1.resource != null) {
                    try {
                        a1.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
    
            // 리소스 자동 해제
            try(A a2 = new A("리소스")) {
    
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
  • AutoCloseable 인터페이스 구현 부분

    class A implements AutoCloseable {
      String resource;
      A() {           // 사용자 생성자를 만들 때 꼭 기본 생성자를 만드는걸 습관화 합시다.
      }
      A(String resource) {
          this.resource = resource;
      }
      @Override
      public void close() throws Exception {
          if(resource != null) {
              resource = null;
              System.out.println("리소스가 해지되었습니다.");
          }
      }
    }
  • 람다식

    public class Main {
      public static void main(String[] args) {
          // type1 익명이너클래스
          A a1 = new A() {
              @Override
              public void abc() {
                  System.out.println("=====================");
                  System.out.println("a1 >>> abc() : ");
                  B b = new B();
                  b.bcd();
                  System.out.println("a1 >>> bcd() : ");
                  System.out.println("=====================");
              }
          };
          // type2 람다식
          A a2 = () -> {
              System.out.println("----------------------");
              System.out.println("a2 >>> abc() : ");
              B b = new B();
              b.bcd();
              System.out.println("a2 >>> bcd() : ");
              System.out.println("----------------------");
          };
          // 인스턴스 참조 type 1 표현
          B b = new B();
          A a3 = b::bcd;
          // 실행
          a1.abc();
          a2.abc();
          a3.abc();
    
          System.out.println("new B() : ");
          System.out.println("a1 >>> abc() : ");
          System.out.println("a2 >>> abc() : ");
          System.out.println("a3 >>> abc() : ");
      }
    }
    interface A {
      void abc();
    }
    class B {
      void bcd() {
          System.out.println("메서드 bcd");
      }
    }

Review

  • OOP의 4가지 특징에 대해서는 알고있으나, 설명하지 못했다.
    1. 추상화 : 어떤 대상/집단의 공통적이고 본질적인 특징을 추출하여 정의한 것
    2. 상속 : 기존에 구현한 클래스를 재활용하여 구현할 수 있는 것
    3. 다형성 : 어떤 객체의 속성이나 기능이 상황에 따라 여러 형태로 변할 수 있다는 것
    4. 캡슐화 : 클래스 내의 연관된 속성(property)이나 함수(method)를 하나의 캡슐로 묶어 외부로부터 클래스로의 접근을 최소화하는 것
  • 배운 것만 보는게 아니라 관련된 메서드나 내용 등 추가학습이 필요할 것 같다.
  • 제네릭의 기본구조는 이해가는것 같은데, 응용해서 사용하는 부분이 조근 더 머리속 정리가 필요할 것 같다.
  • 람다식까지는 어느정도 이해가 되는데, A a = B::new이런식으로 참조람다식이 잘 이해가 가지 않는다.

TO DO

  • JAVA 수업진도 나간거 복습하기
    • 이너클래스 / 예외 처리 / 제네릭 / 람다식
profile
블로그 이전 했습니다. 아래 블로그 아이콘(🏠) 눌러서 놀러오세요

0개의 댓글