본문 바로가기

프로그래밍언어/Java

(71)
[Java 중급] 오토 박싱 오토 박싱 - Autoboxingpublic class AutoboxingMain1 { public static void main(String[] args) { //Primitive -> Wrapper int value = 7; Integer boxedValue = Integer.valueOf(value); //Wrapper -> Primitive int unboxedValue = boxedValue.intValue(); System.out.println("boxedValue = " + boxedValue); System.out.println("unboxedValue = " + unboxedValu..
[Java 중급] 자바 래퍼 클래스 자바 래퍼 클래스자바는 기본형에 대응하는 래퍼 클래스를 기본으로 제공한다. byte -> Byteshort -> Shortint -> Integerlong -> Longfloat -> Floatdouble -> Doublechar -> Characterboolean -> Boolean=> 자바가 제공하는 기본 래퍼클래스는 두 가지 특징을 가진다. 1. 불변이다. 2. equals로 비교해야 한다.  예제  package lang.wrapper;public class WrapperClassMain { public static void main(String[] args) { Integer newInteger = new Integer(10); // 삭제 예정, 대신 valueOf 사용 권장 ..
[Java 중급] 래퍼 클래스 - 기본형의 한계 기본형의 한계자바는 객체 지향 언어이다. 그런데 자바 안에 객체가 아닌 것이 있다. int, double 같은 기본형이다. 따라서 객체 지향 프로그램의 장점을 살릴 수 없다. 대표적인 예로 메서드를 제공할 수 없고, null 값을 가질 수 없다는 점이 그렇다.  예제기본형의 한계를 이해하기 위해, 두 값을 비교해서 다음과 같은 결과를 출력하는 간단한 예제를 보자.  package lang.wrapper;public class MyIntegerMethodMain0 { public static void main(String[] args) { int value = 10; int i1 = compareTo(value, 5); System.out.println("i1 =..
[Java 중급] 메서드 체이닝 - Method Chaining 메서드 체이닝 - Method Chaining메서드 체이닝에 대해서 코드를 통해서 알아보자. public class ValueAdder { private int value; public ValueAdder add(int addValue) { value += addValue; return this; } public int getValue() { return value; }} => 단순히 값을 누적해서 더하는 기능을 제공하는 클래스이다. 자기 자신(this)의 참조값을 반환한다.  public class MethodChainingMain1 { public static void main(String[] args) { ValueA..
[Java 중급] String 최적화 자바의 String 최적화 문자열 리터럴 최적화 컴파일 전String helloWorld = "Hello, " + "World"; 컴파일 후String helloWorld = "Hello, world" 따라서 런타임에 별도의 문자열 결합 연산을 수행하지 않기 때문에 성능이 향상된다.  String 변수 최적화문자열 변수의 경우 그 안에 어떤 값이 들어있는지 컴파일 시점에 알 수 없기 떄문에 단순하게 합칠 수 없다. String result = str1 + str2; 다음과 같이 최적화를 수행한다. String result = new StringBuilder().append(str1).append(str2).toString() 위와 같이 간단한 경우는 자바가 최적화를 처리해주기 때문에 지금처럼 간단한 경우..
[Java 중급] StringBuilder - 가변 String 불변인 String 클래스의 단점불변인 String 클래스에도 단점이 있다. 두 문자를 더하는 경우를 생각해보자. 불변인 String 내부 값은 변경할 수 없다. 따라서 변경된 값을 기반으로 새로운 String 객체를 생성한다. 문자를 더 자주 변경하는 경우라면 계속 String 객체를 만들 것이다. 결과적으로 컴퓨터의 CPU, 메모리 자원을 더 많이 사용하게 된다. 그리고 문자열의 크기가 클수록, 문자열을 더 자주 변경할수록 시스템의 자원을 더 많이 소모한다.   StringBuilder이 문제를 해결하는 방법은 단순하다. 불변이 아닌 가변 String이 존재하면 된다. 가변은 내부의 값을 바로 변경하면 되기 때문에 새로운 객체를 생성할 필요가 없다.  public class StringBuilderM..
[Java 중급] String 클래스 - 불변 객체 String  클래스 - 불변 객체String 은 불변 객체이다. 따라서 생성 이후에 내부 문자열의 값을 변경할 수 없다.  => String 내부로 들어가보면 final로 선언된 것을 확인할 수 있다.  public class StringImmutable1 { public static void main(String[] args) { String str = "hello"; str.concat("java"); System.out.println("str: " + str); }} 실행결과=> 문자열이 합쳐지지 않았다. 왜 일까?concat의 결과를 변수에 할당해보자.  public class StringImmutable1 { public static voi..
[Java 중급] String 클래스 - 비교 String 클래스 비교String 클래스를 비교할 때는 항상 equals 비교를 해야한다. 동일성 : == 연산자를 사용해서 두 객체의 참조가 동일한 객체를 가리키고 있는 지 확인동등성 : equals 메서드를 사용하여 두 객체가 논리적으로 같은지 확인public class StringEqualsMain1 { public static void main(String[] args) { String str1 = new String("hello"); String str2 = new String("hello"); System.out.println("new String() == 비교: " + (str1 == str2)); System.out.println("..