백엔드 개발자라면 대답해야 할 100가지 질문22 10. HashMap과 TreeMap? HashMap과 Hashtable? HashMap과 TreeMap Map이란 key-value 형식을 기반으로 데이터를 저장할 수 있는 자료구조이다. 이때, Key는 데이터에 유일성을 가지고 있어야 한다. 필자 개인적으로 지금까지 Map 객체를 사용할 때 구현체로 HashMap을 주로 사용했는데 이 기회에 어떤 구현체가 있고 어떤 차이가 있는지 알아보자. public interface Map { int size(); boolean isEmpty(); boolean containsKey(Object key); boolean containsValue(Object value); V get(Object key); V put(K key, V value); V remove(Object key); void putAll(Map 백엔드 개발자라면 대답해야 할 100가지 질문 2023. 8. 4. 9. Collection과 Collections의 차이점은 무엇인가요? Collection Collection은 java.util. package에 포함되어 있으며 Collection framework의 루트 인터페이스이다. 주로 비슷한 성질을 가진 각각의 객체들을 묶어 놓기 위해 만들어 놓았다. Collection은 인터페이스의 main sub-interface로는 List, Set, Queue가 있다. Map의 경우 java의 Collection framework에 포함되기는 하지만 Collection을 직접적으로 상속받고 있지는 않다. Collection 인터페이스의 주요 메서드로든 add(), remove(), clear(), size(), contains()가 있다. Collections Collection Collections interface class 각각의 .. 백엔드 개발자라면 대답해야 할 100가지 질문 2023. 8. 2. 8. 자바 컨테이너는 무엇을 의미하나요? 데이터의 ‘저장’이라는 의미로 가장 먼저 등장한 자료구조는 배열이다. 배열을 사용하면 동일한 성질을 가진 primitive type 또는 Reference type의 값을 저장할 때 활용할 수 있다. 하지만 이 글을 읽는 사람들은 대부분 알다시피 배열에는 무시할 수 없는 큰 단점이 있다. ‘크기가 정해지면 바뀔 수 없다.’라는 배열의 성질은 자료 저장의 확장성을 크게 저해하는 요소이다. 이를 해결하기 위해 다양한 자료구조들을 지원하려는 목적으로 등장한 것이 java.util 라이브러리의 container 클래스이다. 주의!!!! 스윙에 사용되는 java.awt.container와 다르다. 대표적인 기본 타입으로 List, Set, Map 등이 있는데 이들은 container라는 클래스에 물리적으로 묶여있.. 백엔드 개발자라면 대답해야 할 100가지 질문 2023. 8. 1. 7. 자바 직렬화란 무엇일까요? 또 언제 사용할까요? 자바를 다루면서, 더 정확히는 Springframework를 다루면서 객체에 대해 활용할 상황을 겪는다면 심심치 않게 직렬화(Serialize)에 대해서 듣게 된다. 대체 뭐길래 자주 듣는 것인가, 언제/어떻게 활용할 수 있는가 한번 알아보자. 직렬화(Serialize) 자바에서 직렬화란 자바 시스템 내부에서 사용되는 객체를 외부의 자바시스템에서 사용할 수 있도록 byte 형태로 전환하는 기술을 말한다. 거꾸로 자바 시스템이 외부에서 byte형태의 데이터를 받고 객체로 변환하는 기술을 역직렬화라고 한다. Book book = new Book(); System.out.println(books[0]); /** * com.example.test.BookTest$Book@3d00c2ae */ 만들어낸 객체에 t.. 백엔드 개발자라면 대답해야 할 100가지 질문 2023. 7. 27. 6. throw와 throws의 차이는 무엇인가요? 자바에서 프로그램이 비정상 종료하는 가장 대표적인 경우는 Error를 만나는 경우와 Exception을 만나는 경우이다. Exception을 만나는 경우 에러를 처리하는 복구 로직을 통해 프로그램의 비정상 종료를 막고 원활한 서비스를 돕는다. (물론 Exception Handling의 의미는 훨씬 깊고 넓다. 언급하지 않은 의미가 훨씬 많으니 “Exception”에 대해서는 따로 공부하자.) throw 예외를 고의로 발생시키는 역할을 한다. public class File { ... public File(String pathname) { if (pathname == null) { throw new NullPointerException(); // 예외 던지기 } this.path = fs.normalize.. 백엔드 개발자라면 대답해야 할 100가지 질문 2023. 7. 25. 5. 자바에서 final의 기능은 무엇입니까? final은 사전적 의미와 마찬가지로 ‘마지막’이라는 의미를 지닌다. final을 통해 객체는 변경될 수 없는 성질(불변성)을 가지게 되고 final은 거의 모든 대상에 사용될 수 있다. 대상 의미 멤버변수 값을 변경할 수 없는 상수가 된다. 지역변수 값을 변경할 수 없는 상수가 된다. 클래스 변경(확장)될 수 없는 클래스를 의미하게 된다. 따라서 final 클래스는 다른 클래스의 조상이 될 수 없다. 메소드 변경(확장)될 수 없는 메소드를 의미하게 된다. final 메소드는 Override를 통해 재정의 될 수 없다. + 현업이나 대규모 프로젝트에 가면 기능 단위 메소드에 final 키워드를 통해서 더 이상의 변경을 금지하는 의미를 표현하기도 한다. 변수에 적용된 final 앞에 final이 붙은 변수.. 백엔드 개발자라면 대답해야 할 100가지 질문 2023. 7. 24. 4. equals()와 hashcode()를 같이 재정의해야 하는 이유 객체의 동등성과 동일성에 대해서 정리할 필요가 있다. 동일성 : 같은 주소값을 가짐 동등성 : 객체 내부에서 값을 비교 (hashCode와 equals를 재정의하여 비교) 우리가 == 과 equals()의 차이점을 String Type의 변수에서 확인했듯이 ==은 동일성을 판단하는 연산자였고 equals()는 동등성을 판단하는 메서드였다. equals() public boolean equals(Object obj) { return (this == obj); } 위 equals 메서드는 Object 클래스 내부에서 선언된 equals이다. this와 파라미터로 받은 obj의 주소값을 비교하고 그 결과 논리값을 반환한다. 보통 새로운 클래스를 만들게 되면 이 equals()를 재정의하여 객체 사이의 동등성을.. 백엔드 개발자라면 대답해야 할 100가지 질문 2023. 7. 20. 3. equals와 ==의 차이점이 뭔지 아시나요? ==과 equals는 둘 다 두 가지의 변수나 객체를 비교하며 다르면 false를, 같다면 true를 반환한다는 특징이 있다. 그렇다면 이 둘의 차이점은 무엇인가? 본질적인 차이 (메서드 vs 연산자) equals는 Object 객체의 메서드이고 == 은 비교 연산자이다. 따라서 Object 객체를 상속받지 않는 primitive type변수들은 equals 메서드를 사용할 수 없다. 비교 대상 차이 (내용 vs 주소값) equals는 비교하고자 하는 대상의 내용을 비교하고 == 는 비교하고자 하는 대상의 주소값을 비교한다. String A = "Java"; String B = A; String C = new String ("Java"); System.out.println(A == B); System.o.. 백엔드 개발자라면 대답해야 할 100가지 질문 2023. 7. 19. 2. JRE와 JDK의 차이점 JRE JRE : Java Runtime Environment의 약자로, 직역하자면 자바 실행 환경이다. Java Virtual Machine이라 불리는 JVM와 자바 실행에 필요한 클래스 라이브러리 등을 포함하고 있어 JRE를 통해서 자바 실행을 지원받을 수 있다. 다만 JRE는 개발에 필요한 요소들을 들고 있지 않다. 따라서 개발을 하기 원한다면 JRE는 옳은 선택이 아니다. JDK JDK는 Java Development Kit의 약자로 자바 개발 키트이다. JDK는 자바 어플리케이션을 개발하기 위한 도구를 지원한다. 대표적인 예시가 자바 컴파일러(javac), 자바 소스 코드의 코드 문서를 생성하는데 도움을 주는 javadoc, 일종의 압축 파일로 java기반 아카이브파일인 jar의 실행 등이 있다.. 백엔드 개발자라면 대답해야 할 100가지 질문 2023. 7. 17. 1. SOLID 원칙 ✏️로버트 마틴이 클린코드를 지향하며 고안한 객체지향의 5가지 원칙을 통틀어 객체지향 5원칙(SOLID)이라 칭한다. 일단 한번 보면 개념은 알아듣긴 하지만 막상 실현하려면 생각보다 어려움이 따른다. SRP, OCP, LSP, ISP, DIP - 5개의 원칙의 앞글자를 따서 SOLID라고 부른다. 🌟SRP 🌟OCP 🌟LSP 🌟ISP 🌟DIP ✍️SRP란? SRP란, Single Responsibility Principle(단일 책임 원칙)으로 '한 클래스는 하나의 책임만 가져야 한다.'는 뜻이다. 여기서 하나의 책임이라는 표현은 조금 모호하게 들릴 수 있다. 이는 문맥과 상황에 따라 달라지며 클 수도 있고 작을 수도 있다. 중요한 것은 "변경"이다. 변경이 있을 때 파급효과가 적으면 단일 책임 원칙을 잘.. 백엔드 개발자라면 대답해야 할 100가지 질문 2023. 7. 15. 이전 1 2 다음