java
-
[Java] Mutable과 ImmutableJava 2022. 1. 4. 23:25
자바의 객체는 기본적으로 힙 영역에 할당되고 스택 영역에 참조값을 갖는 참조 타입 변수를 통해 데이터에 접근한다. 이러한 객체는 Mutable(가변) 객체와 Immutable(불변) 객체로 나눌 수 있다. Immutable Object 불변 객체는 데이터 변경이 불가능한 객체를 말한다. 단순하게 생각하면 final 키워드처럼 초기화 이후에 값을 변경할 수 없다고 생각할 수 있다. 하지만 불변 객체는 객체의 데이터 수정이 아예 불가능한 것이 아니라 힙 영역에 저장된 값을 수정할 수 없는 것이다. 불변 객체의 종류로는 String, Boolean, Integer, Float, Long, Double 등이 있다. 이는 String을 제외하곤 원시 타입의 래퍼 타입이다. 어 ❔ 저 타입의 객체는 수정할 수 있는..
-
[Java] Singleton PatternJava 2022. 1. 3. 23:37
Java에서 Singleton 패턴이란 ❔ 싱글톤 패턴은 소프트웨어 디자인 패턴 중에 하나로, 하나의 객체만을 생성해 이후에 호출된 곳에서는 생성된 객체를 반환하여 프로그램 전반에서 하나의 인스턴스만을 사용하게 하는 디자인 패턴을 말한다. public class Singleton { // Instance private static Singleton instance = new Singleton(); // private construct private Singleton() {} public static Singleton getInstance() { return instance; } } 위 코드는 싱글톤 패턴을 적용한 예제이다. 객체를 static 변수로 설정하여 인스턴스화하지 않고 접근 제한자를 privat..
-
[Java] Serialization과 DeserializationJava 2022. 1. 3. 21:58
자바에서 데이터(객체)를 외부로 전송하려면 어떻게 해야할까 ❔❔ 객체를 저장/복원하거나 네트워크 상으로 전송하기 위해서는 객체의 내용을 I/O가 처리할 수 있는 형태로 변환해야 한다. 이를 할 수 있게 해주는 것이 직렬화(Serialization)과 역직렬화(Desirialization)이다. 직렬화(Serialization) 직렬화는 객체를 외부로 저장/복원하거나 네트워크 상으로 전송할 수 있도록 바이트 형태로 변환하는 기술을 말한다. 역직렬화(Deserialization) 역직렬화는 직렬화를 통해 변환된 바이트 형태를 다시 원상태인 객체로 변환시키는 기술을 말한다. 직렬화의 특징 객체의 데이터는 파일로 변환되어 저장되어 있기 때문에 프로그램이 종료되어도 언제든지 객체로 변환할 수 있으며, 외부로 보내..
-
[Java] String, StringBuffer, StringBuilderJava 2022. 1. 3. 20:11
자바에서 문자열을 다루는 대표적인 클래스로 String, StringBuffer, StringBuilder가 있다. 각 클래스의 특징을 이해하고 상황에 맞는 적절한 클래스를 사용하기 위해 각자의 특징과 장단점에 대해 알아보려고 한다. String vs StringBuffer/StringBuilder String과 StringBuffer/StringBuilder의 가장 큰 차이점은 String은 불변(immutable)의 속성을 갖는다는 점이다. 다음과 같은 예를 들어보자. String str = new String("hello"); // "hello" str = str + " world"; // "hello world" 우리는 위와 같이 String 객체에 문자열을 추가하여 사용한 경험이 있을 것이다. ..
-
[Java] Identity와 EqualityJava 2022. 1. 3. 18:03
동일성(Identity)와 동등성(Equality) 이전 포스팅에서 원시 타입과 참조 타입에 대해 알아보았다. 참조 타입의 객체를 비교할 때는 원시 타입 변수와 달리 값의 비교가 동일성, 동등성 두 가지의 의미를 가지게 된다. 동일성(Identity) 비교는 참조값을 비교하기 때문에 속성과 타입이 같아도 참조값이 다르면 다른 객체로 구분한다. 동등성(Equality) 비교는 equals 함수를 통해 객체의 속성을 비교한다. 하지만 객체의 최상위 클래스인 Object 클래스의 equals 함수를 보면 다음과 같이 파라미터로 받은 인스턴스와 메서드를 호출한 인스턴스 간의 동일성 비교(==)를 한다. public boolean equals(Object obj) { return (this == obj); } 다..
-
[Java] Primitive type과 Reference typeJava 2022. 1. 3. 16:58
자바에서 타입을 크게 두 가지로 분류할 수 있다. 하나는 원시 타입(primitive type), 또 다른 하나는 참조 타입(reference type)이다. 원시 타입: boolean(1 byte), char (2 bytes), byte(1 byte), short(2 bytes), int(4 bytes), long(8 bytes), float(4 bytes), double(8 bytes) 참조 타입: Integer, Long, Double 등 new 연산자로 생성할 수 있는 객체 원시 타입 vs 참조 타입 원시 타입과 참조 타입의 기능적 차이는 크게 2가지가 있다. 1. null을 담을 수 있는가 ❔ 원시 타입은 null을 담을 수 없지만 참조 타입은 null을 담을 수 있다. int i = null;..
-
[Java] Shallow copy와 Deep copyJava 2022. 1. 2. 23:30
코드를 짜다보면 배열이나 객체를 복사해야 하는 경우가 발생한다. 이때 실수로 복사를 잘못할 경우 이슈가 생길 수 있기 때문에 주의해야 한다. 이를 위해 얕은 복사와 깊은 복사의 차이점에 대해 명확하게 이해하고 넘어가고자 한다. 얕은 복사(Shallow copy)와 깊은 복사(Deep copy) 얕은 복사(Shallow copy)는 주소값을 복사(스택 영역)하기 때문에 참조하고 있는 실제 값은 같다. 깊은 복사(Deep copy)는 실제 값을 메모리 공간에 복사(힙 영역)하기 때문에 참조하고 있는 실제 값이 다르다. 이해를 쉽게 하기 위해 코드로 알아보도록 하자. 다음과 같이 이름, 나이를 가지는 Person 클래스가 있다고 가정해보자. public class Person { String name; int..