Programming 언어/JAVA

14. String 클래스 및 Class 클래스

하냥집사 2023. 8. 30. 19:48

1. String 클래스

String 선언하기

new 해서 쓰거나 그냥 = "abc"처럼 할당해서 쓰거나

1. 힙 메모리에 인스턴스로 생성되는 경우와 상수 풀에 있는 주소를 참조하는 두 가지 방법

2. 힙 메모리는 생성될 때마다 다른 주소 값을 가지지만, 상수 풀의 문자열은 모두 같은 주소 값을 가짐

-> 얘는 힙에 잡힌다. -> 생성마다 다른 주소 값(객체로 생성한다 생각해)

-> 얘는 상수 풀에 잡힌다.-> 생성마다 같은 주소 값

== -> 주소값을 비교하니까 위와 같은 결과가 나온다,

3. 한 번 생성된 String은 불변(immutable)

4. String을 연결하면 기존의 String에 연결되는 것이 아닌 새로운 문자열 생성(메모리 낭비 발생 가능성)

문자열 객체 두 개 만들고 concat으로 연결시킨다. 그리고 결과를 확인하면

이렇게 나온다. -> 새로운 문자열은 주소가 다름

쉽게 생각해보면~~

java가 java 문자열을 가리키다가 javaandroid를 가리키게 되는 것!

2. StringBuilder, StringBuffer 활용하기

1. 내부적으로 가변적인 char[] 멤버 변수로 가짐

2. 문자열을 여러 번 연결하거나 변경할 때 사용하면 유용

3. 새로운 인스턴스를 생성하지 않고 char[]를 변경함

4. StringBuffer는 멀티 쓰레드 프로그래밍에서 동기화 보장

5. 단인 쓰레드 프로그램에서는 StringBuffer 사용을 권장

6. toString() 메서드로 String 반환

3. text block 사용하기(java 13)

1. 문자열을 """ """ 사이에 이어서 만들 수 있다.

2. html, json 문자열을 만드는데 유용하게 사용할 수 있음

출력하면

이렇게 나온다~

4. Class 클래스

1. 자바의 모든 클래스와 인터페이스는 컴파일 후 class 파일 생성

2. Class 클래스는 컴파일 된 class 파일을 로드하여 객체를 동적 로드하고, 정보를 가져오는 메서드가 제공

3. Class.forName("클래스 이름") 메서드로 동적 로드함 -> 클래스 이름으로 직접 Class 클래스 가져오기

4. Class c = String.class -> 생성된 인스턴스에서 Class 클래스 가져오기

// 동적 로딩 //

컴파일 시에 데이터 타입이 binding 되는 것이 아닌, 실행중에 데이터 타입을 binding 하는 방법

-> 원래는 데이터 타입 선언하면 그 데이터 타입에 맞는 클래스를 찾아서 바인딩함

1. 프로그래밍 시에는 문자열 변수로 처리했다가 런타임시에 원하는 클래스를 로딩하여 binding 할 수 있다는 장점

2. 컴파일 시에 타입이 정해지지 않으므로 동적 로딩시 오류 발생하면 프로그램의 심각한 장애 발생 가능

클래스 정보 알아보기

1. reflection 프로그래밍: Class 클래스를 사용하여 클래스의 정보등을 알 수 있고, 인스턴스를 생성, 메서드 호출하는 방식의 프로그래밍

2. 로컬 메모리에 객체 없는 경우, 원격 프로그래밍, 객체의 타입을 알 수 없는 경우 사용 - 로컬은 같은 메모리 위치

3. java.lang.reflect 패키지에 있는 클래스를 활용하여 프로그래밍

4. 일반적으로 자료형을 알고 있는 경우엔 사용하지 않음

 

Class 클래스 부분은 좀 난이도가 있어서 넘겨도 괜찮습니다!(vscode에서 오류도 많음)