[Java] 기초5 (참조 자료형, 문자열)

sua_ahn·2022년 12월 27일
1

Java

목록 보기
6/15
post-thumbnail

참조형 타입 (reference type)

: 기본 자료형 외의 데이터 타입 (클래스, 배열, 열거, 인터페이스 등)

<자료형 종류>

  • 기본형
    • 객체 생성없이 값 대입
    • 변수와 값이 stack 영역에 저장됨

  • 참조형
    • 객체 생성 → 주소를 통해 데이터에 접근
    • 값을 heap 영역에 저장, 그 주소(reference)를 스택 영역에 저장

🌱 참조형 타입 생성

// 기본 구조
클래스 변수명 = new 클래스();

// String
String str = new String();	// 기본값 null

// 배열 -> 크기 할당해줘야 함
int arr1[] = new int[3];	// 선언 & 초기화
int[] arr2 = {0, 0, 0};		// arr1, arr2 값 같음

Wrapper class

: 기본 자료형을 객체로 다루기 위해 사용하는 클래스

primitive type=boxing⇒wrapper class
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charChar
booleanBoolean

 

🌱 Wrapper class 생성 및 사용

// wrapper class도 literal 표기 가능
Integer iobj = 987;

String str = new String("123");

// String -> int 변환
int i = Integer.parseInt(str);
int j = Integer.valueOf(str);

// int -> String 변환
String s1 = i + "";
String s2 = String.valueOf(i);
String s3 = iobj.toString();

 

🌻 Auto boxing / unboxing

JDK 1.5 이후로는 보다 편한 형변환을 위해
auto boxing(자동으로 기본형 데이터를 래퍼 클래스에 담는 것)
auto unboxing을 지원한다.

int i = 10;

Integer obj = (Integer) i;	// i의 auto boxing(기본형 -> 참조형)
int sum = i + obj;			// obj의 auto unboxing(참조형 -> 기본형)

 


문자열 String

문자열은 문자로 구성된 문장으로,
기본 자료형만큼 자주 쓰이는 참조형 데이터.

Java에서 문자열은 class 형태로 java.lang module에 들어있으며,
내부를 보면 char[]로 이루어짐.

 

🌱 문자열 생성

String str1 = "Hello world";				// 문자열도 literal 표기 가능
String str2 = new String("Hello world");	// instance 생성

String str3;								// 멤버변수의 기본값 null
String str4 = "";							// 지역변수는 빈 문자열로 초기화

✔ String과 wrapper class에서의 literal 표기

: 기본형 자료처럼 변수에 값만 대입하는 것이 아니라 객체도 생성됨
  다만, 값이 같으면 같은 주소를 참조

 


🌻 문자열 내장 메소드

합치기 concat

문자열을 합치는 방법은 대표적으로 아래 3가지가 있다.

  1. concat 메소드
    : 메소드 사용 시마다 새로운 인스턴스 생성(주소 재할당)

  2. StringBuffer, StringBuilder의 append 메소드
    : 주소 변경없이 값만 변경

	StringBuffer sb = new StringBuffer("abc");
    System.out.println(System.identityHashCode(sb));
    
	sb.append("123");
    System.out.println(System.identityHashCode(sb));	// 위와 같은 해시코드
  1. + 연산자
    : 문자열을 StringBuilder로 변환시킨 뒤, append로 문자열을 더하고 다시 toString 메소드로 문자열을 반환

불변 객체(immutable object)
: 초기화 후 상태 변경이 불가능한 객체
→ String class는 불변 객체로, 수정 메소드(replaceAll, trim 등) 사용 시
값이 수정되는 게 아니라 새로운 인스턴스가 생성됨

 

비교 equals

문자열의 값을 비교할 때는 반드시 equals 를 사용해야 한다 ❗

== 연산자를 사용할 경우 아래와 같이 예상과 다른 결과가 나올 수 있다.

String a = "hello";					// 변수 선언 및 초기화(literal 표기)
String b = new String("hello");		// 인스턴스 생성

System.out.println(a.equals(b));	// true (값이 같음)
System.out.println(a == b);			// false (주소가 다름)
System.out.println(a == "hello");	// true (literal 표기로 주소 같음)

a와 b는 은 같지만, 서로 다른 객체이다.

equals이 같은지 비교하고, == 연산자는 주소가 같은지 비교한다.

 

형식 지정 format

변수의 값을 형식화하여 대입한 문자열 리턴

int n = 30;

String rain = String.format("비 올 확률: %d%%", n);		// 리턴
System.out.printf("비 올 확률: %s%%", n);				// 출력

// 공백
System.out.println(String.format("%3sjane.", "hi"));	// "   hijane."
System.out.println(String.format("%-3sjane.", "hi"));	// "hi   jane."

// 소수점 표현 (반올림)
System.out.println(String.format("%.3f", 3.4219423));	// "3.422"

📋 포맷 코드

코드설명
%sString(자동 변환)
%ccharacter
%dinteger(10진수)
%ffloating-point
%o8진수
%x16진수
%%문자 % 자체
%.nf소수점 n번째까지 반올림 표현
%n$n번째 인수 대입

 

그 외 메소드

기능메소드구조리턴값 자료형
탐색containsa.contains("값")boolean
인덱스 리턴indexOfa.indexOf("값")int
인덱싱charAta.charAt(인덱스)char
길이lengtha.length() int
교체replaceAlla.replaceAll("값", "대체값") String
슬라이싱substringa.substring(시작 인덱스, 끝+1) String
자르기splita.split("구분자") String[]
앞뒤 공백 제거trima.trim() String
대문자 / 소문자toUpperCase / toLowerCasea.toUpperCase() String
반복repeata.repeat(반복횟수) String
문자배열 생성toCharArraya.toCharArray()char[]
profile
해보자구

0개의 댓글