본문 바로가기

Java13

[Java] MessageFormat 들어가기 전에 이번 프로젝트에서 Feed 기능을 구현하기로 했다. 아래와 같은 템플릿을 만들어놓고 일정 신청이 완료되면 해당 정보로 문자열을 치환해서 데이터를 가공해야 했다. [일정 신청] OOO님이 2023년 O월 OO일 O요일 20:00로 코칭 일정을 신청했습니다. 참고로 발신인 정보는 닉네임 변경과 같은 사유로 업데이트될 수 있어서 조회할 때 치환해서 보여주기로 하고 날짜 정보에 대한 치환만 했으면 됐는데 어떤 걸 사용하면 좋을까 찾다가 MessageFormat을 사용하기로 했다. MessageFormat MessageFormat은 원하는 위치에 지정한 문자열을 삽입할 수 있어서 위의 경우처럼 지정된 Template이 있고 값들만 변경해서 완성된 메시지를 얻고 싶을 때 사용하기에 알맞다. 사용할 때.. 2023. 5. 27.
[Java] Object.clone() 들어가기 전에 멘토링 시간에 clone()과 Clonable 인터페이스에 대해 제대로 답변하지 못했던 것이 생각난다. 멘티님과 같이 리마인드하면서 얕은 복사와 깊은 복사까지 짚고 넘어갔었는데 어제 정렬 알고리즘 문제를 풀다가 배열을 복사할 때 간단하게 사용하면서 다시 생각이 났다. 인터넷에 이 키워드로 정리된 글이 많아서 여러 개를 읽다가 java.lang.Object.clone 메소드라는 글을 보게 됐다. Object.clone()이 native 메서드라서 구현 코드가 나와있지 않은데 이 글을 통해서 관련 코드를 살펴볼 수 있었고, 인용하신 Thinking in Java의 내용을 통해 새로 알게되는 내용도 꽤 많았다. 참고로 추가하신 사이트들에서도 다른 개념들을 파악하는 데 도움이 돼서 이 글을 바탕으.. 2023. 3. 4.
[Java] Object.hashCode()와 Hashing, 그리고 Hash Collision 들어가기 전에 Object의 hashCode() 메서드는 객체를 구별하는 정수 값을 반환한다. hashCode() 메서드에도 equals() 메서드와 같이 규약이 존재하는데 해당 내용은 다음과 같다. 1. 자바 응용 프로그램이 실행되는 동안 동일한 객체에 대해 hashCode() 메서드가 두 번 이상 호출될 때 비교에 사용되는 정보가 수정되지 않는 이상 동일한 정수 값을 일관되게 반환해야 한다. 동일한 응용 프로그램이라고 할지라도 각각의 다른 실행에서 이 값은 다를 수 있다. 2. 두 객체에 대한 equals() 메서드 호출 결과가 true라면 hashCode() 메서드를 호출했을 때 동일한 정수 값이 반환되어야 한다. 3. 두 객체에 대한 equals() 메서드 호출 결과가 false라면 hashCod.. 2023. 2. 20.
[Java] Object.equals() 들어가기 전에 우리 눈에는 보이지 않지만 사실 모든 클래스들은 java.lang 패키지에 위치한 Object 클래스를 상속받고 있다. 클래스에 명시되어있지 않더라도 컴파일 시점에 상속 관계 설정을 해주기 때문이다. Class Object is the root of the class hierarchy. Every class has Object as a superclass. All objects, including arrays, implement the methods of this class. 그렇다면 자바는 왜 Object 클래스를 모든 클래스가 상속받게 했을까? 이유는 바로 Object의 메서드들에 있다. 배열을 포함한 모든 객체들은 Object 클래스의 메서드들을 구현하고 있다. 다시 말해서, 모든 클.. 2023. 2. 14.
[Java] Socket에 관하여 들어가기 전에 자바의 Socket에 대해 설명하기 전에 먼저 네트워크 관점에서 소켓을 알아보고자 한다. 기본적인 Socket의 개념에 대해 공부한 것을 정리하고자 하는 글이므로 자세한 송수신 과정이나 소켓 말소에 대해서는 다루지 않으며 모두 TCP 통신을 기반으로 작성되었다. 클라이언트가 서버와 데이터를 송수신하기 위해서는 OS의 내부에 있는 네트워크 제어용 소프트웨어인 프로토콜 스택을 이용해야 한다. 에서 소켓은 개념적인 것이어서 실체가 없다고 설명하면서 소켓 자체를 프로토콜 스택 내부에 데이터를 송수신 하기 위한 제어 정보를 저장하는 메모리 영역이라고 생각하면 된다고 이야기한다. 그러니까 데이터 송수신을 위한 연결의 양 끝점에 소켓이 위치하는 것이다. 실제로 아래의 데이터 송수신 의뢰 과정을 보면 이.. 2023. 2. 8.
[Java] 다중 상속이 가지는 문제 들어가기 전에 자바가 다중 상속을 지원하지 않는 이유는 무엇일까? James Gosling이 작성한 자바 백서 에 따른 자바의 특징을 먼저 살펴 보자. 자바는 단순하다. 객체 지향적이다. 분산 환경에서 사용된다. 인터프리터 언어이다. 견고하며 안전하다. 아키텍처에 중립적이다. 이식성이 있다. 높은 성능을 제공한다. 멀티스레드를 지원한다. 동적으로 처리가 가능한 언어이다. 이중 오늘의 주제와 연관된 특징은 바로 "SIMPLE"이다. Oracle Primary characteristics of the Java programming language include a simple language that can be programmed without extensive programmer training whil.. 2023. 2. 3.