본문 바로가기

Back-end/Java

(25)
[Java] Mutable 객체와 Immutable 객체의 차이점 Mutable 객체는 변경 가능 객체이고, Immutable 객체는 불변 객체라고 흔히들 말합니다. Mutable 객체는 도메인 개체(도메인 클래스 혹은 엔티티)로 사용됩니다. Mutable 객체의 변경 메서드는 Command method라고도 부르며, 리턴 타입을 void로 정의합니다. 또한 void 리턴 타입의 어떤 상태를 변경하는 매서드는 모두 Command method의 상징입니다. Immutable 객체는 불변 객체이며 값 객체, 서비스 객체 등에 사용됩니다. Immutable 객체의 변경 메서드는 변경한 객체의 복사본을 반환해야 합니다. 불변 객체는 Thread-safe 하여 멀티 스레드 환경에서 사용 가능
[Java] 직렬화와 역직렬화 직렬화(Serializable)란 자바 시스템 내부에서 사용되는 객체, 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트 형태로 데이터 변환하는 기술 역직렬화는 바이트로 변환된 데이터를 다시 변환하는 기술 자바 직렬화는 JVM의 메모리에서만 상주되어있는 객체 데이터를 영속화(Persistence)가 필요할 때 사용됩니다. 시스템이 종료되더라도 없어지지 않는 장점을 가지며 영속화된 데이터이기 때문에 네트워크로 전송이 가능합니다.
[Java] 강한 결합과 느슨한 결합 결합도는 의존성의 정도를 나타내며 다른 모듈에 대해 얼마나 많은 정보를 알고 있는지에 대한 척도입니다. 어떤 모듈이 다른 모듈에 너무 자세한 부분(구현 세부사항)까지 알고 있을 경우에 강한 결합도를 가진다고 합니다. 어떤 모듈이 다른 모듈에 대해 필요한 정보(인터페이스로 추상화된 고수준 정책)만 알고 있다면 두 모듈은 낮은 결합도를 가진다고 합니다. 객체지향 관점에서 결합도는 객체 또는 클래스가 협력에 필요한 적절한 수준의 관계만을 유지하고 있는지를 나타냅니다. 이러한 관점에서 강한 결합도는 반드시 지양해야 하며, 개발자가 적절한 결합도는 유지할 수 있도록 고민하고 설계해야 합니다.
[Java] try-with-resources try-with-resources는 자바 버전 7에 도입된 문법입니다. 자바 7 버전 이전에서 하나 이상의 리소스(java.lang.AutoCloseable을 구현한 객체 혹은 java.io.Closeable를 구현한 객체)를 사용할 경우 개발자가 임의로 finally문에서 ~~.close()를 사용하여 자원 해체를 시켜줘야 했습니다. 만약 개발자가 사용한 자원을 finally문에서 해제시켜주지 않고 누락시켰다면 자원이 해제되지 않은 채로 프로그램이 오작동하게 되고, finally문에서 자원을 해제 시켜주더라도 자원 해제를 위한 중복 코드가 발생하기 때문에 소스 코드의 가독성을 해지는 단점이 있었습니다. 이를 해결하기 위해 try()안에 사용할 리소스 객체를 명시적으로 선언하여 사용하면, try 블록 안..
[Java] String, StringBuilder, StringBuffer 각각의 차이 String은 불변입니다. new 연산을 통해 생성된 인스턴스의 메모리 공간은 변하지 않음 (Immutable) 문자열 연산 시 새로 객체를 생성하여 오버헤드 발생 시킴 불변이므로 동기화 신경 쓰지 않아도 되어 멀티 스레드 환경 사용 가능 Garbage Collector로 제거되어야 함. StringBuilder와 StringBuffer는 이런 String의 특징 때문에 사용하는 가변 타입이라고 볼 수 있습니다. StringBuilder와 StringBuffer는 Thread-safe 여부의 차이가 있습니다. StringBuilder는 비동기로 Thread-safe 하지 않습니다. StringBuffer 는 동기로 Multi-Thread 환경에서 사용할 때는 를 사용합니다. new 연산으로 클래스를 한 ..
[Java] Java 8에서 추가된 기능 Java 8에서는 Lambda식, Stream API, Optional, 날짜 시간 API, StringJoiner 등이 추가되었습니다. Lambda는 함수형 프로그래밍을 지원 Stream API는 고차함수를 지원 Optional은 Null-safety를 제공하며, Stream과 사용법이 유사 날짜 시간 APi는 Joda-time 등의 라이브러리에서 영향을 받아 괜찮은 API 되었음 StringJoiner는 문자열을 간단하게 구분자로 합칠 수 있는 기능 제공
[Java] 동일성(identity)와 동등성(equality) (equals(), ==) 동일성(identity)은 객체의 주소를 비교하는 것이고, (==) 동등성(equality)은 객체의 같음을 비교하는 것입니다. (equals) 기본적으로 자바에서는 Object 클래스에 정의된 equals() 메소드가 동일성 비교를 합니다. 따라서, 개발자는 원한다면 equals() 메서드를 오버라이딩해서 동등성의 판단 기준을 정의해주면 됩니다.
[Java] 객체지향이란 객체지향을 정의하면, 의존성 관리입니다. 객체지향으로 의존성을 관리함으로써 변경 영향을 최소화하고 독립적인 배포가 가능해지며 독립적인 개발이 가능해집니다. 따라서, 객체지향에서 가장 중요한 것은 DIP(Dependency Inversion Principle)를 통한 고수준 정책(High Level Policy)과 저수준 구현 세부사항(Low Level Details)의 분리라고 할 수 있습니다.