programming language 67

Tree 구조(Structure)란?

필자는 Tree 구조에 대해 많이 들었지만 정확히 이해를 하지 못한것 같다. 이번에는 제대로 개념에 대해 이해하고 이것을 코드로도 작성해볼 것이다. 이 글은 다음 사이트들를 참조했다. 출처 사이트 목록 클릭 더보기 https://en.wikipedia.org/wiki/Binary_tree https://yoongrammer.tistory.com/71 https://www.programiz.com/dsa/trees https://www.geeksforgeeks.org/introduction-to-tree-data-structure/ https://justin-miguel-fernandez.medium.com/algorithm-time-complexity-9bf96bc84d2d https://www.geek..

Set이란? HashSet, TreeSet, LinkedHashSet

이번 글의 목적은 Set에 대해 이해하고, HashSet과 TreeSet, LinkedHashSet이 있는데 이 기능은 무엇이 있고, 어느 상황에 사용하면 좋을지 생각해는 것이다. 1. Set이란? 중복이 없는 element들을 저장하는 컬렉션. 더 형식적으로, set은 e1.equals(e2)같은 e1과 e2 의 한 쌍을 가지지 않는다. 이름에 함축되어 있듯이, 이 인터페이스는 수학적인 set abstraction을 모델화한다. 출처 : https://docs.oracle.com/javase/8/docs/api/java/util/Set.html 또한, set을 이해하기 위해 다음 그림을 참고하면 좋다. 수학적으로 중복되지 않은 항목들이 모인 것을 set라고 한다. 간단하게 set의 특징에 대해 이야히가..

[Java] Comparable, Comparator, 정렬 방법

필자는 무언가 정렬을 잘 못하는것을 최근 깨달았다. 그래서 이번에는 자바에서 정렬을 하는 방법을 학습하려고 한다. 이게 이런게 참 기초이지만 모르는다는것에 부끄러움을 사알짝 느끼면서 오늘도 시자악~ 1. Comparable oracle에서 Comparable에 대한 설명을 가져왔다. 이 인터페이스는 그것을 구현하는 각 클래스의 객체에 total ordering을 수행한다. 이 ordering은 클래스의 natural ordering으로 여기지고, 클래스의 compareTo 메소드는 natural 비교 메소드로 여겨진다. 이 인터페이스를 구현하는 객체의 리스트는 자동적으로 Collections.sort(그리고 Arrays.sort)로 정렬될 수 있다. 이 인터페이스를 구현하는 객체는 정렬된 맵에서 키로 이..

Map 알아보기

저번에 List에 대해서 정리를 했는데 정리를 하지 않을 것이 Map이랑 Set이 있다. 이번에는 Map에 대해 알아보고자 한다. 1. Map이란? java.util에 존재하는 map interface는 키와 값사이의 매핑을 나타낸다. 맵 인터페이스는 컬렉션 인퍼테이스의 하위 항목이 아니다. 그러므로 컬렉션 타입의 나머지와 약간 다르게 작동한다. 맵은 유일한 키를 가진다. 출처 : https://www.geeksforgeeks.org/map-interface-java-examples/ Map은 사전처럼 key-value 연관 매핑같은 사용에 완벽하다. 맵은 키로 색인을 하는데 혹은 키로 값을 가져오거나 수정할 때 사용한다. 흔한 시나리오는다음과 같다. 에러 코드와 그 설명에 대한 맵 우편번호와 도시의 맵..

Deque, LinkedList 와 ArrayDeque

이번 시간에는 Deque 인터페이스를 알아보고 이의 구현체인 LinkedList와 ArrayDeque를 알아보고 비교할 것이다. 1. Deque란? 원소의 추가와 삭제를 둘 다 끝부분에서 지원하는 선형 collection. Deque라는 이름은 double ended queue의 줄임말이고 주로 "deck"으로 발음된다. 대부분의 Deque(Double eneded queue) 구현체는 Deque가 포함하고 있는 원소의 수에 고정된 제한이 없다. 하지만, 이 인터페이스는 고정된 사이즈 제한을 가진 것들과 마찬가지로 용량 제한(capacity-restricted) deque를 지원한다. 이 인터페이스는 deque의 끝부분 둘 다에 접근하는 메소드를 정의한다. insert, remove, examine이 제..

직렬화란 무엇인가 ? / serialVersionUID 설정 이유

1. 재미있는 직렬화 이야기 화성과 지구간의 통신 때는 2040년... 화성은 식민 행성으로 발전했다. 근데 지구에서 로봇을 만들었다. 근데 화성에서도 마침 로봇을 만들었는데 지구의 로봇보다 성능이 좋아서 이것을 사용하기로 결정했다. 두 행성 과학자들이 미팅 후 화성에서 지구로 로봇을 보내기로 했다. 그런데, 문제가 발생했다! 로봇 100개를 지구로 보내는 비용이 100만 달러라고 한다. 여행 기간은 무려 60일이 걸린다고 한다. 비용 문제로 고민한 결과, 화성의 과학자들은 이 로봇의 핵심 기술을 지구의 과학자들과 공유하기로 한다. 이 핵심 기술은 로봇의 구조에 관한 것이다. 화성 로봇들은 지구의 로봇들과 같은 구조로 개발됐고, 화성 과학자들은 로봇 각각 부품의 데이터를 직렬화해서 지구로 보냈다. 지구의..

Stack, Queue, PriorityQueue

최근에 코딩 테스트를 풀었는데 위 세개의 항목을 실제로 사용한 적도 없고, 그렇다고 이해하고 있지 않았다. 그런 이유로 위 세개를 정리한다. Stack, Queue, PriorityQueue... 내가 갈게 ㅠㅠ 1. stack 스택 클래스는 객체의 LIFO를 나타낸다. vector가 스택으로 취급될 수 있도록 다섯개의 작업을 가진 Vector클래스를 extends 한다. 보통의 push와 pop작업이 제공된다. top을 뽑아내는 메소드 뿐만 아니라, 스택이 비었는지, 그리고 한 아이템을 스택에서 찾는 메소드, 또 top에서 얼마나 떨어져 있는지 같은 기능을 제공한다. 출처 : https://docs.oracle.com/javase/7/docs/api/java/util/Stack.html 스택은 객체의 ..

List 관련 질문 답변 정리

금일 면접을 봤는데 List, Map, Set의 차이점에 대해 물어봤다. 그런데 대답을 잘 하지 못한 기념(?)으로 이에 대한 내용을 정리하려고 한다. 물론 내가 받은 질문 뿐 아니라, 평소 들엇는데 기억이 잘 안나는 것에 대한 답도 정리하려고 한다. 사실 이게 그냥 코드로 써보면 진짜 별 거 아닌데 사용하는것과 이해하는것은 별개의 문제긴 하다. 그런데 내용이 솔직히 어렵지는 않다. 다만 어느 차이점에 대해서 많이 질문을 하니, 그러한 것을 중심으로 정리할 것이다. 자세한 사용 방법이나 이런것은 흔히 찾을 수 있는 것이니 알아서 찾아보자. 1. What is Collection Framework? 자바에서 컬렉션 프레임워크(collection framework)란 다수의 데이터를 쉽고 효과적으로 처리할 ..

static / final / static final이란?

어찌보면 쌩 기초이지만 생각나는대로 기초를 다시 다잡고 가려고 한다. static 혹은 final도 굉장히 많이 보는 친구들이지만(너같은 친구 난 없어) 정말 간단히 알아보려 한다. 1. Static (정적)이란? 정적 : 고정된이란 의미 이 키워드를 사용하여 static 변수, static 메소드를 만들 수 있다. 정적 필드와 정적 메소드는 객체에 소속된 멤버가 아니라 클래스에 고정된 멤버로, 클래스 로더가 클래스를 로딩해서 메소드 메모리 영역에 적재시 클래스별로 관리된다. 따라서, 클래스 로딩이 끝나는 즉시 사용이 가능하다. 필드나 메소드를 객체마다 다르게 가져야 한다면 인스턴스로 생성하면 되고 공용 데이터에 해당하거나 인스턴스 필드를 포함하지 않는 메소드를 선언하고자 할 때 이용한다. 출처 http..

어노테이션(annotation)이란?

평소 어노테이션을 많이 사용하지만 이에 대해 무엇이라고 설명할 수 없는 자신을 가르치기(?) 위해 이 글을 정리한다. 다음 정리할 내용을 사이트와 함께 java의 정석도 참고했다. 출처 : https://www.geeksforgeeks.org/annotations-in-java/ 1. 어노테이션이란? 프로그램의 소스코드 안에 다른 프로그램을 위한 정보를 미리 약속된 형식으로 포함시킨 것 - java의 정석 발췌 - 어노테이션은 @로 시작한다. 어노테이션은 컴파일된 프로그램의 행동을 바꾸지 않는다. 어노테이션은 프로그램 elements와 메타데이터를 어울리도록 돕는다. 즉, 인스턴스 변수, 생성자, 메소드, 클래스 등등 어노테이션은 한 프로그램이 컴파일러에 의해 다뤄지는 방식을 바꿀 수 있기에 순수한 주석..