면접준비(6)StringBuffer,StringBuilder, 래퍼(wrapper)클래스

Tae hyun·2023년 4월 6일
0

면접준비

목록 보기
6/9

출처: 자바의 정석 ch09 477~483, 490~496 ch12 p670~ 674
1)StringBuffer
StringBuffer클래스는 String클래스와 달리 인스턴스를 생성할 때 지정된 문자열을 변경할 수 있다. 내부적으로 문자열 편집을 위한 버퍼를 가지고 있으며, StringBuffer인스턴스를 생성할 때 크기를 지정할 수 있다.
주의점은 String클래스에서는 equals메서드를 오버라이딩해서 문자열의 내용을 비교하도록 구현되어있지만, StringBuffer클래스는 equls메서드를 오버라이딩하지 않아서 StringBuffer클래스의 equals메서드를 사용해도 등가비교연산자로 비교한것과 같은 결과를 얻는다는 것이다.

StringBUffer클래스의 생성자와 메서드
: String클래스와 유사한 메서드를 많이 가지고있으며 추가로 추가,변경,삭제와 같이 저장된 내용을 변경할 수 있는 메서드들이 추가로 제공됨
1)StringBuffer()
16문자를 담을 수 있는 버퍼를 가진 StringBuffer 인스턴스를 생성함

StringBuffer sb = new StringBuffer();

2)StringBuffer append(boolean b)
StringBuffer append(char c)
StringBuffer append(long l)
...
매개변수로 입력된 값을 문자열로 변환하여 StringBuffer인스턴스가 저장하고 있는 문자열의 뒤에 덧붙임

3)StringBuffer delete(int start, int end)
시작위치부터 끝 위치 사이에 있는 문자를 제거함. 단 끝위치의 문자는 제외
4)StringBuffer reverse()
StringBuffer 인스턴스에 저장되어 있는 문자열의 순서를 거꾸로 나열

  1. StringBuilder
    StringBuffer는 멀티쓰레드에 안전하도록 동기화되어있다. 그런데 동기화는 StringBuffer의 성능을 떨어뜨린다. 멀티쓰레드로 작성된 프로그램이 아닌 경우, StringBuffer의 동기화는 불필요하게 성능만 떨어뜨림.
    이것을 개선하기위해 쓰레드의 동기화만 뺀 StringBuilder가 추가됨
    사용법은 소스코드에서 StringBuffer대신 StringBuilder를 사용하도록 바꾸기만 하면됨.

3.래퍼(wrapper)클래스
프로그래밍을 하다보면 기본자료형 8개의 변수를 객체로 다뤄야 하는 경우가 있다.
ex. 매개변수로 객체를 요구, 기본형 값이 아닌 객체로 저장할 때, 객체 간의 비교가 필요할 때...
이때 사용되는 것이 래퍼클래스이다. char와 int형을 제외한 나머지는 자료형 이름의 첫 글자를 대문자로 한 것이 각 래퍼클래스의 이름

byte-Byte
char-Character
int-Integer
float-Float
double-Double
boolean-Boolean
long-Long
short-Short

오토박싱&언박싱
기본 타입의 값을 직접 박싱, 언박싱하지 않아도 자동적으로 박싱과 언박싱이 일어나는 경우가 있음. 오토박싱은 기본형 값을 래퍼 클래스의 객체로 자동 변환해주는 것, 언박싱은 반대로 변환하는 것.

지네릭스
다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입체크를 해주는 기능.
ex)

//지네릭스 사용
List<Customer> a=m1();
for(Customer c: a){}
//지네릭스 사용 안한다면
List b = m2();
for(Object o:b){
	Customer c = (Customer)o
    }

두번째 예시처럼 제네릭을 안쓰면 컴파일시에는 오류를 발생 시키지 않고 실행할 때 오류가 남

장점
1. 타입 안정성을 제공함
2. 타입체크와 형변환을 생략할 수 있으므로 코드가 간결해짐

지네릭스 용어
Box : 지네릭 클래스. T의 Box 또는 T Box라고 읽는다
T 타입 변수 또는 타입 매개변수.(T는 타입 문자)
Box 원시 타입(raw type)

Boxb = new Box();
String은 대입된 타입

참조변수와 생성자의 대입된 타입은 일치해야 함.
지네릭 클래스간의 다형성은 성립.하지만 대입된 타입은 일치해야함
Listlist = new ArrayList();
Listlist = new LinkedList();

매개변수의 다형성도 성립

import java.util.*

class Product {}
class Tv extends Product{}
class Audio extends Product{}

public class Main{
public static void main(String[]args){
	ArrayList<Product>list = new ArrayList<Product>();
	list.add(new product());
	list.add(new Tv());
	list.add(new Audio());
	}
}
profile
안녕하세요 개발하는 알파카입니다. https://github.com/oh-taehyun

0개의 댓글