0. 자바의 객체
자바의 클래스는 extends 키워드롤 다른 클래스를 상속하지 않으면 암시적으로 java.lang.Object 클래스를 상속한다. 따라서 모든 자바의 클래스는 Object 클래스의 자식 혹은 자손 클래스이며 Object 클래스는 최상위 부모 클래스에 해당된다.
Object 클래스는 메소드로만 구성되며 모든 클래스가 이를 상속 받는다. 메소드 오버라이딩을 통해 Object 클래스의 메소드들을 재정의해 활용한다.
- equals() : 두 객체를 비교하고 동일한 객체이면 true, 그렇지 않으면 false를 반환한다.
- hashcode() : 객체를 식별할 하나의 정수값을 반환합니다. 컬렉션의 HashSet, HashMap, Hashtable의 객체 동등성 비교에 활용됩니다.
- toString() : 객체의 문자정보를 리턴합니다. 기본적으로 "클래스명@16진수해시코드"로 구성된 문자정보를 리턴합니다.
- clone() : 원본 객체와 필드값이 동일한 새로운 객체를 복사합니다. 얕은 복제, 깊은복제, Cloneable과 같은 개념이 있습니다. 이에대한 추가적 내용을 차후 추가하겠습니다.
- finalize() : 객체 소멸자, 사용한 자원을 닫고 싶거나 중요한 데이터를 저장할 때 재정의해 사용합니다.
-이 밖에도 compare(), deepEquals(), isNull(), requireNonNull()... 등이 있습니다.
https://kephilab.tistory.com/91
1. Java 자바 [API] - 자바 기본 API 패키지
1. API API : Application Programming Interface 즉 라이브러리(library) 로 프로그램에서 자주 사용되는 클래스 및 인터페이스의 모음이다. - String, System 등의 클래스도 모두 API 에 속하는 클래스들이다. - API
kephilab.tistory.com
자바의 모든 객체는 Object Type 입니다. Object Type 객체는 Heap 영역에 생성되며 참조값을 Stack 영역에 할당합니다. 만약 함수 내부에서 파라미터로 참조값을 복사 받아 값을 변경한 경우 종료 시점에서도 변경 내역이 반영되어 있습니다. 이는 같은 Object Type을 참조하고 있기 때문에 (얕은 복사) 함수가 종료가 된 이후에도 스택 영역의 복사받은 참조값은 휘발되지만 힙 영역에 변경된 객체는 사라지지 않기 때문입니다.
하지만 불변 객체의 경우 참조값을 얕은 복사로 전달받았을 때 Object Type 객체의 값을 변경한다면 새로운 객체를 할당해 값의 변경을 방지합니다. 이는 private final int 등으로 필드가 원시타입이며 오직 생성자에 의해서만 초기화될 수 있는 방식으로 제한하고 setter를 구현하지 않는 방식으로 간단히 만들 수 있습니다. 필드가 참조타입인 경우 추가적 작업이 요구됩니다.
1. 불변객체
- 생성후 그 값을 변경할 수 없는 객체입니다. 만약 내부 데이터를 변경 해야만 한다면 재할당을 통해 이루어집니다.
- 종류 : String, Integer, Boolean, ...
- 장점 : 객체의 신뢰도가 올라갑니다. transaction 내에서 그 객체가 변하지 않아 우리가 믿고 쓸 수 있습니다. 멀티 스레드 환경에서 동기화 처리 없이 객체를 공유할 수 있습니다. 또한 방어적 복사가 필요 없습니다.
- 단점 : 객체가 가지는 값마다 새로운 객체가 필요해 메모리 누수와 같은 성능 저하를 발생시킬 수 있습니다.
https://velog.io/@conatuseus/Java-Immutable-Object%EB%B6%88%EB%B3%80%EA%B0%9D%EC%B2%B4
[Java] Immutable Object(불변객체)
면접에서 "자바에서 불변객체에 대해 설명해주세요.."라는 질문을 받았다.속으로 'final만 붙이면 불변객체 아닌가?'라는 생각을 했지만 불변객체에 대해 공부하지 않아 모른다고 했다...그래서
velog.io
https://dev-cool.tistory.com/23
불변객체(Immutable Object)를 사용해야하는 이유
1. 불변객체(Immutable Object)란? 불변객체는 말그대로 변하지않는 객체로 객체가 생성된후 내부 상태가 변하지 않는 객체를 의미한다. 불변객체는 Setter 메소드를 제공하지 않으며, 내부상태를 제공
dev-cool.tistory.com
2. StringBuilder, StringBuffer
- 불변 객체인 String을 수정할 시 재할당이 이루어지며 이로인한 메모리 누수가 발생할 수 있습니다.
- String 끼리 더하거나 수정하는 연산이 반복되고 많아질 경우 메모리 할당과 해제가 발생하여 성능 저하가 발생합니다.
- 이처럼 불변 객체인 String을 문자를 더하거나 순서를 바꾸거나 빼는 등의 변경 가능한 연산을 수행하기위해 StringBuilder, StringBuffer를 활용합니다.
- StringBuffer는 문자열 인스턴스에 동시 접근을 할 경우 중복 점유를 막아 동기화 처리에 사용됩니다. 따라서 StringBuilder보다 무겁습니다.
StringBuiler의 메소드
- String 클래스와 동일한 메소드 : charAt(), indexOf(), lastIndexOf(), length(), replace(), substring(), toString()
- append() : 문자열 추가
- capacity() : 문자열 길이인 length()와 달리 capacity는 현재 char[] 배열 사이즈를 반환합니다.
- delete() : 전달받은 범위의 문자열을 제거합니다.
- deleteCharAt() : 특정 인덱스의 한 문자를 제거합니다.
- insert() : 특정 위치에 문자열을 삽입합니다.
- reverse() : 문자열을 거꾸로 뒤집습니다.
- setCharAt() : 특정 위치의 문자를 변경합니다.
- setLength() : 문자열 길이가 조정됩니다. 공백으로 채워지거나 문자가 삭제됩니다.
- trimToSize() : char[] 배열 길이가 문자열 길이와 동일하게 조정됩니다. 앞 뒤 공백을 모두 제거해 줍니다.
https://codevang.tistory.com/121
java.lang.StringBuilder (문자열) 주요 메소드 [1/2]
StringBuilder와 StringBuffer 클래스도 String 클래스와 같이 문자열을 다루는 클래스입니다. 다만, String 클래스가 문자열을 생성자로 넣어 인스턴스를 한 번 생성하고 나면 인스턴스가 가진 문자열 값
codevang.tistory.com
'프로그래밍언어 > Java' 카테고리의 다른 글
Java Collection Framework (JCF) (0) | 2023.06.21 |
---|---|
람다식 (0) | 2023.05.24 |
자바 어노테이션 (0) | 2023.05.21 |
[Java] Optional이 모길래??? (0) | 2023.04.13 |
[자바 기초] 자바 클래스 (0) | 2023.03.28 |