[TIL] 2024-07-18

성장일기·2024년 7월 18일

회고

목록 보기
7/37

중요 학습 내용 [JAVA]

Interface

vs abstract class

  • 차이점
구분추상 클래스인터페이스
상속 가능 범위단일 상속다중 상속
키워드extends 사용implements 사용
추상 메소드 갯수abstract 메소드 0개 이상모든 메소드는 abstract
abstract 키워드 명시명시적 사용묵시적으로 abstract
  • 공통점
구분추상 클래스인터페이스
자체 인스턴스 생성생성 불가생성 불가
다형성 적용 시 상위 타입
활용 가능 유무
가능가능

marker interface

  • 관련없는 두 객체를 하나의 개념으로 묶어, 인터페이스 바디부에 아무것도 없는 인터페이스

Frequently used APIs

OBJECT

  • toString()

  • equals()

    • 동일비교(연산자 ==): 주소값을 비교한다.

      • 따라서 객체를 참조하는 변수끼리 비교할 때는 각각의 두 객체를 참조하는 변수의 주소값을 비교하게 된다.
      • 객체 간에 동일비교연산자(==)로 연산 시, 해당 객체의 주소값을 비교한다.

      vs 동등비교

      • 동등비교는 두 객체의 hashcode 값을 비교한다.
      • 따라서 실제 두 인스턴스의 필드값이 달라도 grouping된 hashcode 값이 같을 수 있다.
      • 이를 통해 인스턴스들의 특정 멤버들이 동일하면 두 인스턴스가 동등하다고 정의할 수 있다.
  • hashCode()

String

  • methods

    • charAt()
    • compareTo()
    • concat()
    • indexOf()
    • trim()
    • toLowerCase()
    • toUpperCase()
    • substring()
    • replace()
    • length()
    • isEmpty()
  • equals()

    • Object로부터 상속받아 값이 같으면 true를 반환하도록 설정되어있다.
  • hashcode()

    • Object로부터 상속받아 값이 같으면 true를 반환하도록 설정되어있다.
  • String(immutable object) vs String builder(mutable object) vs String buffer(mutable object)

    • String(immutable object)
    • StringBuilder(mutable object)
      • capacity()로 기본적으로 16byte이지만, 어느정도 값이 커지면 (*2+2)byte로 용량이 커진다.

        주소값은 변동이 없고, 배열이 추가되는 식으로 용량이 증가한다.

      • delete()
      • deleteCharAt()
      • insert()
      • reverse()
    • StringBuffer(mutable object)
      • constant pool 사용 불가능
        • StringBuilder와 거의 동일하나, thread-safe를 유지하기 위한 목적이 추가된다.
  • Parsing

    • split(): 정규표현식을 이용하여 비정형화된 문자열을 분리
    • StringTokenizer(): 문자열의 모든 문자들을 구분자를 활용하여 문자열이 분리

      ex)

      String colors = "red, yellow, green, purple, blue";
      StringTokenizer colorStringTokenizer = new StringTokenizer(colors, ", ");
      while (colorStringTokenizer.hasMoreTokens()) {
          String color = colorStringTokenizer.nextToken();
          System.out.println(color);
      }
  • 주의할 점

    • 문자열은 초기화되는 방식이 다양하기에, 동일비교연산자 사용이 적절하지 않을 수 있다. 따라서 equals()를 사용하도록 한다.

Wrapper

  • 기본 자료형이 클래스화 된 형식

  • 목적:

    • 기능과 속성을 가질 수 있다.
    • 객체가 되기에 동등비교를 할 수 있다.(equals(), hashcode())
    • override로 메서드의 반환타입에 대해 다형성을 적용할 수 있다.
  • 방식: (auto-)boxing - 기본자료형을 wrapper 클래스 자료형으로 담는다.

  • parsing:

    • wrapper class -> primitive type
      • char를 제외한 다른 기본타입 자료형으로 바꾸려면 wrapper클래스의 valueOf메서드를 사용하면 된다.
      • Character는 String의 charAt()을 사용한다.
    • primitive type -> wrapper class
      • WrapperClass의 toString()메서드를 사용
      • String의 경우 "" + 4.0f와 같이 변환하면 편하다.
  • 주의할 점:
    • wrapping이 되는건 다형성이 아니다.

Constant pool

  • primitive type과 wrapper class는 constant pool을 이용하여 효율적인 메모리 관리를 한다.

개선의 여지

  • 당장 이해가 가지 않더라도 우선 넘어가면 이해의 여지가 생기 수 있음을 기억하자.
profile
엔지니어로의 성장일지

0개의 댓글