ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 20240820 6일차
    카테고리 없음 2024. 8. 20. 17:29

    [기본형/참조형 변수]
    - 기본형: 값을 복사해서 대입 가능
    - 참조형: 하나의 객체를 참조값을 통해 여러 변수에서 공유 가능

    [가변 객체 (mutable object)와 side effect]
    - copy by reference: A의 인스턴스 주소값을 B의 인스턴스에 복사 후, A의 인스턴스 변수값만 변경해도 B의 인스턴스 변수값이 같이 변경됨
    - 이 문제를 어떻게 해결할까? -> 불변 객체

    [불변 객체 (immutable object)]
    - 클래스 작성 시 인스턴스 변수 선언에 final 예약어 붙이기
    - setter 작성 X
    - 불변 객체 예시: String 클래스


      * 클래스 자체가 final로 선언되어있기 때문에, 다른 클래스에서 String 클래스를 상속받지 못함
      * setter 메소드가 없음



    [문자열]
    - 문자열 리터럴은 내부적으로 new String()을 호출해 생성한 객체임
    - String str = "Hello"; 는 new String("Hello")를 호출해서 생성한 객체를 가리킴
    - String을 리터럴로 선언하면, 먼저 String Constant Pool에 해당 리터럴이 있는지를 찾고, 있으면 기존 리터럴의 참조를 사용하고, 없으면 새로운 String 객체를 생성하여 String Constant Pool에 추가함
    - String을 객체로 선언하면, 새로운 객체가 heap 메모리에 생성됨
    - 문자열 비교
      * equals() 메소드: 두 문자열의 내용을 비교하는 메서드
      * == 연산자: 두 문자열의 주소값을 비교하는 연산자

    2024.07.14 - [분류 전체보기] - [Java] 문자열 비교 - equals() 메서드 vs == 연산자

     

    [Java] 문자열 비교 - equals() 메서드 vs == 연산자

    String 선언 차이 (literal vs new)new로 선언하면 java heap memory에 개별 객체가 생성됨String strA = new String("Hello World");literal로 선언하면 String Constant Pool에 생성된 객체를 참조함String strB = "Hello World";  equa

    happyst.tistory.com


    - String Constant Pool은 Garbage Collection이 될까?
      * Java7 이후에 String Pool이 Heap 영역으로 이동하고 나서부터는 String Constant Pool에서도 GC가 수행됨!                    

    - String.valueOf( ): 기본형을 String으로 반환해주는 메소드



    [배열]
    - int[] scores = {}; // 크기 0짜리 배열로 초기화 됨
    - System.out.println(Arrays.toString(배열 이름)); : 배열 이쁘게 프린트 // [1, 2, 3, 4, 5]
    - 배열에서 특정 값 검색: O(N)
    - 배열에서 특정 인덱스값 검색: O(1)
    - 배열 중간에 값을 추가/삭제: O(N)
    - 정렬
      * 배열 오름차순 정렬: Arrays.sort(배열 이름);
      * 배열 내림차순 정렬: Integer[ ] 배열을 사용하거나, Arrays.stream( )을 사용



    [binary search]
    - 정렬된 배열/리스트에서 divide and conquer 방식을 사용하여 탐색 범위를 절반으로 줄여나가면서 원하는 값을 찾는 탐색 기법
    - 시간복잡도: O(log N)
    - linear search 보다 효율적



    [동적 배열 (ArrayList)]
    - 객체 생성: ArrayList<참조 타입> 참조변수 = new ArrayList<>();



    [메소드 오버라이딩]
    - 상속받은 메서드를 자식 클래스에 맞도록 수정하는 것
    - 부모 클래스의 메서드와 동일한 시그니처, 동일한 리턴 타입을 가져야 함
    - 부모 클래스의 메서드보다 접근 범위를 더 좁게 수정할 수 없음 (ex. public 메서드를 private 메서드로 오버라이딩 할 수 없다)
    - 부모 클래스의 메서드가 선언한 것 보다 더 넓은 범위의 exception을 던질 수 없음

    - 오버라이딩 불가능한 경우
      * private 메서드: 부모 클래스 전용이므로 상속 불가
      * static 메서드: 클래스 소속이므로 상속 불가
      * final 메서드: 더 이상 수정할 수 없으므로 오버라이딩 불가

Designed by Tistory.