분류 전체보기82 12. Iterator란 무엇인가? List list = new LinkedList(); Iterator iterList = list.iterator(); 자바에서 Iterator는 Collection Framework의 값을 조회, 삭제할 때 사용한다. 위와 같은 방식으로 Iterator 참조변수 = 컬렉션.iterator();로 선언하여 사용한다. Iterator Interface public interface Iterator { boolean hasNext(); E next(); default void remove() { throw new UnsupportedOperationException("remove"); } default void forEachRemaining(Consumer 백엔드 개발자라면 대답해야 할 100가지 질문 2023. 8. 8. 11. Queue에서 Poll()과 remove()의 차이점은 무엇인가요? Queue에서는 Enqueue, Dequeue와 같은 기본적인 같은 동작을 하는 메서드가 여러 개 있다. 그 대표적인 경우가 Poll()과 remove()이다. Poll vs Remove /** * Retrieves and removes the head of this queue. This method differs * from {@link #poll poll} only in that it throws an exception if this * queue is empty. * * @return the head of this queue * @throws NoSuchElementException if this queue is empty */ E remove(); /** * Retrieves and removes.. 백엔드 개발자라면 대답해야 할 100가지 질문 2023. 8. 7. 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. LINE 오픈챗 서버가 100배 급증하는 트래픽을 다루는 방법 - 본론1 서론에서 말했듯 LINE에서 활용하는 이벤트 기반 아키텍처의 개요는 아래와 같다. 🔥 오픈챗 서버에서는 메시지 전송과 메시지 리액션, 메시지 읽음 등과 같은 오픈챗 내 다양한 행위를 모두 이벤트로 간주하고 이벤트가 생성될 때마다 스토리지에 저장한 후 오픈챗에 참여하고 있는 모든 사용자에게 서버 푸시로 ‘새로운 이벤트가 생성됐으니 받아 가세요’라고 알린다. 서버 푸시를 받은 사용자(클라이언트)는 스토리지에 새로 들어온 이벤트를 페치(fetch) 이벤트 API로 받아가고 새 메시지 등을 화면에 추가하는 액션을 실행한다. 자 그럼 이제 핫 챗에서 급증하는 트래픽을 다룰 수 있는 LINE 만의 노하우를 알아보자. 🎮핫 챗에서 급증하는 트래픽을 다루는 방법 ✅Case 1. fetch 이벤트 API 요청 급증 이 .. 기술블로그 2023. 8. 2. 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. LINE 오픈챗 서버가 100배 급증하는 트래픽을 다루는 방법 - 서론 📑서론, 오픈챗? 오픈챗은 메신저형 소셜 네트워크와 장점을 공유한다. 여러 사람이 동시에 소통할 수 있으며, 실시간으로 참여하지 않더라도 남겨진 메시지를 통해 수월하게 소통할 수 있다. 또한 접속만 하고 있다면, 참여 여부와 상관없이 인원과 채팅내역이 지속된다. 파일, 목소리, 단체통화 등 여러 형태로 소통이 가능하며 연동된 앱에 따라선 송금, 선물등의 행위까지 수월하게 할 수 있으며 대부분 모바일이 연동되므로 비교적 접속과 참여가 자유롭다. 한 오픈챗에 수천 명부터 수만 명의 사용자가 참여할 수 있고, 활발한 오픈챗은 한 오픈챗에서만 1분에 20만 개의 API 요청을 처리하기도 한다. 통계적으로 라인의 오픈챗 서버는 1분에 천만 개, 하루에 약 100억 개의 API요청을 처리하고 있다. 따라서 네이버의.. 기술블로그 2023. 8. 1. 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. Github flow 대부분의 개발자들이 협업을 통해 일을 하고 작업을 공유하고 있다. 어떤 개발자는 코드를 보고 수정사항을 찾아내고 어떤 개발자는 기능을 개발하기 위해 코드를 추가하고 어떤 개발자는 기능 보수를 위해 기존의 코드를 뜯어고치고 있다. 이들이 각자 작업하는 경우 파일에는 버전이 생기고 이를 관리해야 하는 필요성을 느끼게 된다. 우리는 이럴 때 형상관리도구를 사용하게 된다. 현재 주류로 여겨지는 Git에서 사용할 만한 브랜치 관리 전략 세가지를 정리하고 소개하겠다. 오늘은 그 첫번째 flow인 Github Flow이다. Github Flow 추후 소개할 Git Flow가 Github에서 활용하기 복잡하다는 단점을 극복하기 위하여 나온 브랜치 전략이다. 브랜치는 단순하게 Master와 Feature브랜치, 두 개로.. cs/Git 2023. 7. 26. 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. 이전 1 ··· 3 4 5 6 7 다음