Integer

신지훈·2023년 10월 19일
0

자바 로드맵

목록 보기
2/2

요즘 알고리즘 공부를 시작했습니다! 백준 알고리즘을 풀다보니 많은 사람들이 BufferedReader를 사용해 저도 따라 사용했습니다. 그러다 보니 String으로 받은 숫자들을 int 타입으로 바꿔주기 위해 Integer.parseInt(); 를 많이 사용하였습니다. 그러던 중 int와 Integer차이를 더 확실하게 알기위해 이 주제로 블로그를 작성합니다.

1. Int vs Integer

1)int : 변수의 타입(data type)

변수란 값을 저장할 수 있는 메모리 상의 공간으로 이 자바의 기본형 데이터들은 편의성을 위해 이러한 객체 지향의 개념 밖에 존재합니다. (자바는 모든 것을 객체로 관리하고자 함)

이 객체 지향의 개념 밖에 있는 타입들을 객체로도 관리하기 위해 객체를 만들 수 있는 클래스가 Integer로 wrapper class라고 불립니다.

2) Integer

Integer은 int의 wrapper class로 클래스답게 매개변수로 객체를 필요로 할 때, 객체 비교, 객체 저장 등 객체를 관리하는데 주로 사용됩니다.

내가 Integer를 사용하다보니 valueof, parseInt 같이 비슷한 기능을 하는 경우 헷갈려 간단히 정리하면

valueof : 매개변수를 받아 Integer객체를 리턴
parseInt : int타입으로 타입변경

이 외의 다른 메소드들은 [여기]를 참고하면 좋을 것 같습니다. (https://kutar37.tistory.com/entry/%EC%9E%90%EB%B0%94-Integer-%ED%81%B4%EB%9E%98%EC%8A%A4%EC%9D%98-%EB%A9%94%EC%86%8C%EB%93%9C)

2. Wrapper class

그럼 wrapper class를 더 알아보면 이는 다른 기본형 데이터를 관리할 수 있도록 아래와 같이 각각에 맞는 클래스가 있다.

그리고 이 wrapper 클래스를 통해 만들어진 객체는 함부로 기본형 데이터들과 상호작용할 수 없습니다. 서로 같은 기본형이거나 객체여야지 상호작용할 수 있어 아래와 같이 서로의 상태를 변환을 할 수 있어야합니다.

boxing : primitive type -> wrapper class 변환 ( int to Integer )
ex) Integer.valueOf();

unboxing : wrapper class -> primitive type 변환 ( Integer to int )
ex) Integer.parseInt();

Java 1.5 에서 Autoboxing and Unboxing in Java 가 도입된 이후로 차이는 거의 없을 거라고 합니다. 이는 기본 유형이 암시적으로 객체로 변환되는 기술로 우리의 번거러움을 줄여주는 기능인 것 같습니다.

3. String

번외로 공부를 하다보니

String str1 = new String("abc");
String str2 = new String("abc");
String str3 = "abc";
String str4 = "abc";

이렇게 같은 String도 다른게 생성할 수 있다는 것이 생각나 이 wrapper 클래스와 연관이 있을 것 같아 찾아보았습니다.

결론부터 말하자면 String은 wrapper 클래스와 같이 String 클래스로 문자열은 다른 데이터들과는 다르게 참조형 데이터 타입(그 중에서도 object 데이터 타입)을 가진다고 합니다.

그래서 str1, str2와 같이 생성할 경우 서로 다른 객체를 만들다 보니 같은 값이지만 다른 객체를 참조하는 반면 str3, str4는 메모리에 같은 내용을 가지는 객체가 있는지 확인하고, str과 str2가 같은 객체를 참조합니다.

String를 객체로 생성할 경우

str.concat(str2);

concat이라는 String class의 메서드를 이용해서 str과 str2를 붙인다고 할 때, 이 메서드는 둘을 붙인 결과를 리턴하지만, str이나 str2가 참조하는 객체 자체는 바뀌지 않습니다.
따라서 이를 바꾸기 위해서는 변경된 결과값을 다시 변수에 대입해주는 과정이 필요합니다.

이런 단점을 해결하기 위해서 사용하는 것이 바로 StringBuffer와 StringBuilder 클래스로 알고리즘 공부를 할 때 많이 사용하는 클래스여서 반가웠다.

4. 마치며...

내가 이미 쓰고 있던 StringBuffer와 StringBuilder 클래스들을 왜 쓰고 있는지 알게되는 계기가 되어서 좋았습니다. 또 wrapper class의 경우도 강의를 통해서 들었던 내용이었습니다. 그땐 내가 잘 이해되지 않아 그냥 넘겼었지만 포기하지 않고 꾸준히 성장하고자 하니 자연스럽게 관심을 가지고 이해하게 되었던 것 같습니다. 앞으로도 더 깊고 꾸준히 공부하도록 노력하자!!

profile
주주주주니어 개발자

0개의 댓글