자바 기본 API(Application Programming Interface)
목차
1.String
2.Wrapper
3.Date
- Calendar
- Gregorian Calendar
4.Math
String Class
String : 문자열 클래스
문자열의 값 수정 불가(불변 클래스) 수정 시 수정된 문자열이 새로 할당 되어 새 주소를 넘김
String name = "abc";
name = "def"; // <-수정된 거 아닌가? 수정된거 아님
immutable(불변) 의미
배열 크기 변경 불가능처럼
눈으로 보이기는 수정되는 것처럼 보이나 컴퓨터 안에 로직은 삭제 새로생성되었고 주소값도 변경됨
API에 구현이 되어있는 메소드들
hashCode(), identityHashCode()
hashCode()
hashCode() : int ← 매개변수x 주소값 반환
Returns a hash code for this string.
주소값을 보기 위해 사용하는 코드
객체의 주소값을 해시코드로 구현한 결과값
object클래스에 있음.
실제 주소값을 직접 볼 수 있는건 아님.
자바는 애초에 주소값을 다이렉트로 볼 수 없게 만듬
equals비교했는데 둘이 같다면 해쉬코드 결과도 둘이 같게해줘야한다
System.out.println("str1의 hashcode : "+str1.hashCode());
System.out.println("str2의 hashcode : "+str2.hashCode());
System.out.println("str3의 hashcode : "+str3.hashCode());
identityHashCode()
System.identityHashCode(변수명)
실주소값을 연산해놓은 결과값을 도출하는 메소드
스트링은 불변 클래스
수정되는게 아닌 새로 생성하고 기존것 삭제하고 대체되는 개념
StringBuffer & StringBuilder
문자열 클래스
주소값은 그대로하고 문자열을 수정 가능케 하는 메소드
가변클래스 : 문자열 수정 가능. mutable(가변)
- String클래스 : 변경이 적고 읽기만 많은 경우에 유리
- StringBuffer / StringBuilder : 문자열에 대한 수정이 많이 일어나는 경우 유리
https://rise-up.tistory.com/303
StringBuffer vs StringBuilder 비교
불변 클래스인 String 클래스랑 다르게 문자열 수정이 가능한 가변(mutable)클래스
문자열 값 수정 가능, mutable(가변) 수정, 삭제 등이 기존 문자열에 수정되어 적용 기본 16문자 크기로 지정된 버퍼를 이용하며 크기 증가 가능
모두 같은 기능이나 동기화처리 가능 / 불가능으로 구별된다
동기화가 들어가면 안전 : 데이터에 대해 락을 걸어놓고 진행. 처리속도가 느림. 동기화가 안들어가면 속도가 빠름
- StringBuffer 동기화 o / 느림 / 안전 / thread safe기능o
- StringBuilder 동기화 x / 빠름 / 안전 x / thread safe기능x
메모리 관리를 위해 String대신 쓰기도 하나 String을 대개 많이씀
컴퓨터도 많이 좋아지고 버퍼나빌더를 쓴다고 눈에띄게 빨라지는건 아님
StringBuffer/StringBuilder는 자동으로 수용량 증가
쓰레드 세이프 기능(thread safe)
멀티 쓰레드 프로그래밍에서 여러 쓰레드로부터 동시에 접근이 이루어져도 프로그램의 실행에 문제가 없는 것을 의미
이를 위해 한 쓰레드가 특정 작업을 끝마치기 전까지 다른 쓰레드에 의해 방해받지 않도록 "임계 영역(critical section)"과 "잠금(lock)"의 개념이 도입됨
- 임계영역(critical section)
둘 이상의 스레드가 동시에 접근해서는 안 되는 공유 리소스(자료 구조 또는 장치)를 접근하는 코드의 일부를 뜻함
- 락(lock)
모든 객체에는 락(lock)이 하나씩 있고 이 락(lock)을 가지고 있는 스레드만 해당 객체의 임계 영역 코드와 관련된 작업이 가능
- 공유 데이터를 사용하는 코드 영역을 임계 영역으로 지정하고, 공유 데이터가 가지고 있는 lock을 획득한 단 하나의 쓰레드만 영역 내의 코드를 수행할 수 있게함
- 해당 쓰레드가 임계 영역 내의 모든 코드를 수행하고 벗어나 lock을 반납해야만 다른 쓰레드가 반납된 lock을 획득하여 임계 영역 내의 코드를 수행할 수 있도록함
쓰레드(thread)의 동기화(Synchronization)
여러 스레드가 한 리소스를 사용하려 할 때
사용하려는 스레드 하나를 제외한 나머지 스레드들은 리소스를 사용하지 못하도록 막는 것
쓰레드 동기화는 크게 Synchronized, Volatile, Atomic 3가지가 있고 추후 깊게 공부해보자
'JAVA > 개념정리' 카테고리의 다른 글
[Java] 자바 기본 API 2 : Wrapper Class(래퍼 클래스) (0) | 2022.08.21 |
---|---|
[Java] 자바 기본 API 1 : String Class 2 - 자주 쓰이는 메소드 (0) | 2022.08.20 |
[Java] 추상클래스(abstract) & 인터페이스(Interface) -- (0) | 2022.08.16 |
[Java] 다형성(polymorphism) & 동적바인딩, 정적바인딩 -- (0) | 2022.08.09 |
[Java] 오버라이딩(Overriding) & 오버로딩(Overloading) (0) | 2022.08.09 |