언어 공부/Java21 [Java] equals()와 hashCode()를 같이 재정의하자! 🙋 들어가며 오늘은 자바의 최상위 객체 Object에 equals()와 hashCode()에 대해서 이야기해 보겠습니다. 이번 글을 통해서 각 메서드를 언제, 어떻게 사용하는지 알아보고 왜 두 메서드를 같이 재정의해야 하는지 알아보겠습니다. 🟰 equals() 문자열을 비교할 때 많이 사용하는 친숙한 메서드입니다. 이 메서드를 왜 사용하는지 이해하기 위해서는 동일성과 동등성의 개념을 알아야 합니다. 간단하게 정리하면 다음과 같습니다. 그리고 이해를 위한 예시를 작성해 보겠습니다. 동일성(identity) : 같은 참조를 가진다. 동등성(equality) : 같은 값을 가진다. String str1 = new String("hejow"); String str2 = new String("hejow"); Sy.. 2023. 7. 20. [Java] 가변성 (feat. Generic) 🙋 들어가며 제네릭에 대해서 자세하게 공부를 하다가 가변성(variance)에 대해서 알게 되었습니다. 어떤 종류가 존재하는지 알아보고, 왜 이런 개념이 있는지 알아보겠습니다. 제네릭을 위해서 다루는 내용이므로 이해가 어렵다면 해당 글에서 예시를 통해 다뤄보도록 하겠습니다. 🔄 가변성이란? 이름에서 예상할 수 있듯이 가변성이란, 특정 타입의 객체를 다른 타입의 객체로 변환할 수 있음을 말합니다. 반대의 개념은 불변성으로, 무공변(Invariance)으로도 부릅니다. 여기서 가변성은 공변과 반공변 두가지가 존재합니다. 어떤 객체 a와 b에 대해서, a가 b로 변환할 수 있다고 가정하겠습니다. 그러면 다음과 같이 총 3가지로 가변성과 불변성을 구분할 수 있습니다. 공변(covariant) : Box를 B.. 2023. 7. 5. [Java] Optional 바르게 사용하기 🙋 들어가며 자바 기반의 백엔드 개발자가 Optional을 제대로 접하는 순간은 JPA의 query method를 사용할 때라고 생각합니다. Optional이 사용하기 편한 객체이지만 사용할 때 주의점을 요합니다. 이 글에서는 Optional에 대한 저의 고찰과 올바르게 사용하는 방법에 대해 이야기해 보겠습니다. 🧐 Optional의 목적 모든 사물들은 각자에게 주어진 알맞은 쓰임이 존재합니다. 예를 들어서, 책은 읽기 위해서 존재합니다. 라면 받침으로 쓰는 것은 본디 목적을 잃는 것입니다. (물론 라면 받침으로 씁니다) 그렇다면 Optional의 쓰임은 무엇일까요? 자바 설계자가 언급한 의도를 가져왔습니다. Our intention was to provide a limited mechanism for .. 2023. 6. 22. [Java] 빌드툴 (feat. Gradle) 🐘 Gradle 이미 우리는 Gradle을 잘 사용하고 있습니다! 하지만 정확하게 어떤 도구인지 알아보는 시간을 가져보겠습니다. 😋😋 자바를 통해서 코드를 작성한 뒤 실행하기 위해선 다음과 같은 과정을 거쳐야 합니다. 작성한 코드(*.java)를 javac 명령어로 바이트 코드로 변환한다. 변환된 코드(*.class)를 java 명령어로 실행시킨다. 매번 저런 과정들을 거치는 게 귀찮기 때문에 자동으로 빌드해 주고 실행시켜 주는 도구들이 출시되었습니다. Maven, Gradle 등이 출시되었고 요즘에는 Gradle이라는 도구를 가장 많이 사용합니다😎 🙋 설치하기 설치하는 방법은 어렵지 않지만 꼭 JDK 1.8 이상 버전이 미리 설치되어 있어야 합니다. java -version 명령어로 확인부터 합시다!.. 2023. 6. 5. [Java] Reflection 🎇 Java Java를 사용하다 보면 리플렉션(Reflection)이라는 용어를 자주 접한다. 대충 무엇인지는 알겠는데 설명해 주세요! 하면 못 할 것 같아서 정리해 본다😋😋 🪞 리플렉션, Reflection 리플렉션이란? 단어의 의미를 떠올려서, 거울에 반사된 어떤 대상을 제약 없이 사용하는 기술이다. 자세하게 설명하면, 힙 영역에 로드된 Class 타입의 객체를 통해서 인스턴스를 생성하고, 접근 지정자의 제약 없이 인스턴스의 메소드와 필드를 사용할 수 있게 하는 Java API이다. 😮 힙 영역에서 Class 타입 가져오기 힙 영역에 로드된 Class 타입은 다음 3가지 방법으로 가져올 수 있다. 클래스.class 인스턴스.getClass() Class.forName(클래스명) public class.. 2023. 1. 11. [Java] 멀티쓰레드 프로그래밍 (22.12.05 updated) ✍️ 학습할 것 Thread 클래스, Runnable 인터페이스 Thread의 상태 Thread의 우선순위 Main Thread 동기화 데드락 📌 Thread 클래스, Runnable 인터페이스 Java는 멀티쓰레드 프로그래밍을 지원하는 언어이다. 멀티쓰레드 환경은 어떤 쓰레드가 문제가 발생하면 다른 쓰레드에도 영향을 미친다. 따라서 쓰레드에 대한 이해는 필수적이고 다른 실행 환경을 제공하는 프로세스에 대한 이해도 같이 해보자. 🧷 프로세스, Process 메모리 상에 올라간 프로그램을 프로세스라고 한다. 자체적인 실행환경을 가지고 있다. 모든 프로세스는 적어도 하나의 쓰레드를 가진다. 둘 이상일 때 멀티쓰레드 프로세스라고 부른다. 🧷 쓰레드, Thread 쓰레드는 일종의 실행환경의 단위로 실제 작업을 .. 2022. 12. 5. 이전 1 2 3 4 다음