본문 바로가기

전체 글

(234)
[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("..
[Spring 기본] 새로운 할인 정책 개발 새로운 할인 정책 개발요구 사항이 변경되어 새로운 할인 정책을 추가해야 된다. 할인 정책이 기존에는 고정 금액 할인이었으나, 주문 금액 당 할인하는 정률 %할인으로 변경한다. 객체 지향 설계의 원칙을 준수했다면 쉽게 할인 정책을 변경할 수 있을 것이다. 코드를 통해 확인해보자.  RateDiscountPolicy 추가 RateDiscountPolicy.javapackage hello.core.discount;import hello.core.member.Grade;import hello.core.member.Member;public class RateDiscountPolicy implements DiscountPolicy { private int discountPercent= 10; @Overr..
[Java 중급] String 클래스 String 클래스자바에서 문자를 다루는 대표적인 타입은 char, String 이 있다.  public class CharArrayMain { public static void main(String[] args) { char a = 'a'; System.out.println("a = " + a); char[] charArr = new char[] { 'h', 'e', 'l', 'l', 'o' }; System.out.println(charArr); String str = "hello"; System.out.println("str = " + str); }} => char는 문자 하나를 다룰 때 사용한다. 따라서 여러 문..
[Java 중급] 불변 객체 - 값 변경 불변 객체 - 값 변경불변 객체를 사용하지만 그래도 값을 변경해야 하는 메서드가 필요하면 어떻게 해야할까? 예제먼저 mutable 객체를 만들어 보고 immutable 객체로 수정해보자.  package lang.immutable.change;public class MutableObj { private int value; public MutableObj(int value) { this.value = value; } public void add(int addValue) { value = value + addValue; } public int getValue() { return value; } public void setValu..
[Java 중급] 불변 객체 불변 객체이전 포스팅에서 발생했던 문제들은 공유하면 안되는 객체를 여러 변수에서 공유함으로써 발생한 문제이다. 사이드 이펙트가 발생한 근본적인 원인을 생각해보면, 객체를 공유하는 것이 문제가 아니다. 문제의 직접적인 원인은 공유된 객체의 값을 변경한 것에 있다.  객체의 상태(내부의 값, 필드, 멤버 변수) 가 변하지 않는 객체를 불변 객체(Immutable Object)라 한다. 앞서 만들었던 Address 클래스를 상태가 변하지 않는 불변 클래스로 다시 만들어보자.  public class ImmutableAddress { private final String value; public ImmutableAddress(String value) { this.value = value;..
[Spring 기본] 주문과 할인 도메인 개발 주문과 할인 도메인 개발1. 할인 정책 인터페이스 생성DiscountPolicy.javapackage hello.core.discount;import hello.core.member.Member;public interface DiscountPolicy { /** * * @return 할인 대상 금액 */ int discount(Member member, int price);} 2. 할인 정책package hello.core.discount;import hello.core.member.Grade;import hello.core.member.Member;public class FixDiscountPolicy implements DiscountPolicy{ private ..