[JAVA] 참조 자료형

타키탸키·2022년 8월 30일
0

JAVA

목록 보기
6/8
  • 참조 자료형
    • ex:) String, BigDecimal...
  • 새로 생성된 객체는 Heap에 저장됨
  • 기본 변수는 Stack에 저장됨
    • 저장되는 정보는 변수명과 값
  • Animal dog = new Animal()에서 dog는 Stack에 new Animal()은 Heap에 저장됨
    • 이때, dog에 대한 값은 Heap에 저장된 new Animal()의 주소(참조, reference)

  • 참조 변수에 값을 설정하지 않으면 null
Animal dog = new Animal(); // 1C
Animal cat; 

cat = dog; // 1C

cat.id = 10;
System.out.println(dog.id); // 10
  • 위 경우, dog에 대한 참조 변수의 주소가 cat의 값으로 복사된다
    • 따라서, cat에 저장된 값은 dog에서도 참조할 수 있다
int i = 5;
int j = 5;

System.out.println(i==j); // true

Animal dog = new Animal(15);
Animal dog2 = new Animal(15);

System.out.println(dog==dog2) // false
  • 기본 변수는 같은 값을 가지면 같다는 결과가 나온다
  • 참조 변수는 같은 값을 가져도 주소(참조 객체)가 다르기 때문에 다르다는 결과가 나온다

"Test".length()
==> 4
  • String은 참조 자료형
    • String 클래스의 메서드를 사용할 수 있다
    • 생성자가 필요없다는 특징(BigDecimal과 비교)
String str = "Test"
  • Test에 대한 인스턴스를 생성하고 레퍼런스(주소)를 str에 저장
  • .charAt()
    • 인자는 인덱스
    • 인덱스에 해당하는 글자를 가지고 온다
  • .substring()
    • 인자는 인덱스
    • 인자로 받은 인덱스부터 마지막 인덱스까지
      • 인자가 두 개일 경우, 두 번째 인자까지
    • 리스트 슬라이싱과 유사한 기능
String someString = "This is a lot of text";

for(int i=0; i<someString.length();i++)
{
	System.out.println(someString.charAt(i));
}
  • .indexOf()
    • 인자는 String / char
    • target String에 인자에 넣은 String이 포함되어 있으면 해당 String이 시작되는 인덱스 리턴
    • 마지막 인덱스는 .lastIndexOf()
  • .contains()
    • 인자는 String
    • 인자에 넣은 String 존재 여부 리턴(boolean)
  • .startsWith()
    • 인자는 String
    • target String의 시작 String이 인자와 같은지 여부
    • 끝 String: .endsWith()
  • .isEmpty()
    • 문자열이 비었는지 확인
  • .equals()
    • 같은 문자열인지 확인
  • .equalsIgnoreCase()
    • 인자는 String
    • 대소문자 상관 없이 같은 문자열이면 true 리턴
  • .concat
    • String 두 개 합치기
    • 원본 String을 바꾸지 않는다
  • .toUpperCase() / .toLowerCase()
    • 문자열 전체를 대문자, 소문자로 바꾸기
  • .trim()
    • 문자열 앞뒤 공백 제거하기
  • 불변성
    • 클래스 인스턴스는 메모리에 생성된 이후에는 어떠한 방식으로도 변경되지 않는다

  • concat
    • string + string = stringstring
    • string + int = stringint
    • 1 + 2 + "3" = "33"
  • .join()
    • 구분자, 글자
    • 구분자 뒤에 나열된 인자들을 구분자로 구분하여 문자열 생성
      • String.join(",","A","B") => "A,B"
  • .replace()
    • 바꿀 문자열, 대체할 문자열

  • StringBuffer / StringBuilder
    • 문자열을 이어붙일 때, 각 문자열마다 인스턴스가 생성되고 더한 문자열을 다른 문자열에 더할 때도 인스턴스가 계속 생성된다 -> 낭비
    • StringBuffer를 활용하여 위 문제 해결 가능
    • StringBuffer는 가변형
    • 동기화된 클래스
      • 멀티 스레딩이 가능한 클래스
      • 속도가 느려질 수 있다
      • StringBuilder로 대체
StringBuffer sb = new StringBuffer("Test");

sb.append("123"); // "Test123"
sb.setCharAt(1,'E'); // "TEst123"

  • Wrapper Classes
    • int -> Integer
    • char -> Character
    • 추가적인 옵션을 제공한다
String -> int
Integer hundred = Integer.valueOf("100");

Float floatWrapper = Float.valueOf(57.0f);
int floatToInt = floatWrapper.intValue(); // 57
  • Wrapper class의 불변성
  • 두 개의 다른 참조 값이 하나의 객체를 가리키고 있다고 해도 문제 없다
    • 재사용 가능
    • 매번 새로운 객체를 생성(new)하지 않아도 된다
      • 메서드는 Heap 안에 존재하는 기존 객체를 재사용할 수 있기 때문
// 생성자로 정수 생성
Integer i1 = new Integer(5);
Integer i2 = new Integer(5);

i1 == i2 // false

// 메서드로 정수 생성
Integer i3 = Integer.valueOf(5);
Integer i4 = Integer.valueOf(5);

i3 == i4 // true
  • Auto Boxing
    • 자바 5에 추가된 기능
    • syntactic sugar
Integer seven = Integer.valueOf(7);
Integer seven = 7; // auto boxing
Integer sevenAgain = 7;

seven == sevenAgain; // true

  • Joda Time Framework
    • LocalDate
      • 날짜
      • 2022년 9월 1일
    • LocalTime
      • 시간
      • 오후 9시 13분
    • LocalDateTime
      • 날짜 + 시간
      • 2022년 9월 1일 오후 9시 13분
  • .now()
    • 현재 날짜, 시간
    • 뒤에 메서드를 붙여 연도, 요일, 날짜 구할 수 있다
      • ex:) LocalDate.now().getYear()
  • LocalDate.of()
    • 특정 연,월,일 설정 가능

  • ctrl + shift + T
    • 클래스에 대한 소스 전체를 볼 수 있다
  • ctrl + O
    • 메서드 리스트 확인 가능
  • ctrl + 클릭
    • 선언으로 이동
  • 마우스 오른쪽 클릭 -> Open Type Hiearchy
    • 구조 전체 확인 가능
profile
There's Only One Thing To Do: Learn All We Can

0개의 댓글