본문 바로가기

프로그래밍언어/Java

(71)
[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;..
[Java 중급] 공유 참조와 사이드 이펙트 공유 참조와 사이드 이펙트사이드 이펙트(Side Effect)는 프로그래밍에서 어떤 계산이 주된 작업 외에 추가적인 부수 효과를 일으키는 것을 말한다.  b.setValue("부산");System.out.println("b -> 부산");System.out.println("a = " + a);System.out.println("b = " + b); => b의 값만 변경하려고 했으나 a의 값도 변경되는 사이드 이펙트가 발생했다. 프로그래밍에서 사이드 이펙트는 보통 부정적인 의미로 사용되는데, 특정 부분에서 발생한 변경이 의도치 않게 다른 부분에 영향을 미치는 경우에 발생한다. 디버깅이 어려워지고 코드의 안정성이 저하된다.  사이드 이펙트의 해결 방안사이드 이펙트는 어떻게 해결할까? 사실 처음부터 다른 객체..
[Java 중급] 기본형과 참조형의 공유 기본형과 참조형의 공유자바에서 제공하는 많은 기본 클래스가 불변 객체로 설계되어 있다. 기본형: 하나의 값을 여러 변수에서 공유하지 않는다. 참조형: 하나의 객체를 참조값을 통해 여러 변수에서 공유할 수 있다.  예제 public class PrimitiveMain { public static void main(String[] args) { //기본형은 절대로 같은 값을 공유하지 않는다. int a = 10; int b = a; // a->b 값 복사 후 대입 System.out.println("a = " + a); System.out.println("b = " + b); b = 20; System.out.pri..
[Java 중급] equals() 동일성과 동등성동일성(Identity) : == 연산자를 사용해서 두 객체의 참조가 동일한 객체를 가리키고 있는지 확인동등성(Equality) : equals() 메서드를 사용하여 두 객체가 논리적으로 동등한지 확인User a = new User("id-100")User b = new User("id-100") => 다른 메모리에 있는 다른 객체이므로 동일성은 다르지만, 회원 번호는 같기 때문에 동등성은 같다.   예제 UserV1.javapublic class UserV1 { private String id; public UserV1(String id) { this.id = id; }} EqualsMainV1.javapublic class EqualsMainV1 { p..
[Java 중급] Object와 OCP Object와 OCP만약 Object 가 없고, Object가 제공하는 toString()이 없다면 서로 아무 관계가 없는 객체의 정보를 출력하기 어려울 것이다.  구체적인 것에 의존 public class BadObjectPrinter { public static void print(Car car) { String string = "객체 정보 출력: " + obj.toString(); System.out.println(string); } public static void print(Dog dog) { String string = "객체 정보 출력: " + obj.toString(); System.out.println(string)..
[Java 중급] toString() toString()Object.toString() 메서드는 객체의 정보를 문자열 형태로 제공한다. 따라서 디버깅과 로깅에 유용하게 사용된다.  예제 public class ToStringMain1 { public static void main(String[] args) { Object object = new Object(); String str = object.toString(); //toString() 반환값 출력 System.out.println(str); //Object 직접 출력 System.out.println(object); }} 실행결과 => 실행결과가 똑같다. Object.toString() 메서드를 확인..