본문 바로가기

전체 글213

Scanner input 타입 체크하기! Scanner로 input을 받을 때, 원하지 않는 타입이 들어와 런타임에러가 발생하는 경우가 있습니다. 특히나 int, double, long과 같은 타입의 변수에 String 또는 맞지 않는 타입이 들어오게 되면 에러가 발생하게 됩니다. String type 변수인 경우는 숫자를 입력해도 자동적으로 String으로 변환해서 인식을 하는데 숫자 type은 그럴 수 없기 때문입니다. 이런 사항을 미연에 방지하기 위해서는 타입체크가 필수인데요! 방법은 굉장히 간단합니다 ☺️👏 바로 hasNextInt() method를 사용하면 됩니다. (type에 따라 hasNextDouble(), hasNextLong() 등 맞춰서 사용하면 됩니다.) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16.. 2022. 5. 30.
Tree 구조 코드로 구현해보기 안녕하세요! 이번에는 지난번에 알아본 tree 구조를 어떻게 코드로 나타내는 것인지 알아보겠습니다. 두근두근 생각보다 굉장히 간단합니다. 저는 직접 노드와 노드를 잇는 간선까지 표현을 해서 직접 트리 모양을 그려내는 것인 줄 알았는데, 그건 아니고 각 노드에 연결된 노드 정보를 저장해주는 형식으로 구현이 되더라구요. 무슨 말인지 직접 코드로 보도록 하겠습니다. Tree 구조를 코드로 표현하는 핵심은 Node class를 만들어 주는 것입니다. 데이터를 담고 있는 각 노드를 객체로 만들어 주는 것이죠! Node class는 굉장히 간단합니다. 1 2 3 4 5 6 7 8 9 10 11 12 public class Node { int value; //최대 세개의 child node Node left; Nod.. 2022. 5. 29.
Non-linear(비선형)자료구조(1) - Tree, BinaryTree와 BST 지금까지 배운 배열, 스택, 큐등은 모두 linear(선형) 구조입니다. 선형 구조라고 하면 데이터가 일렬로 늘어서 있는 형태를 의미합니다. [1, 2, 3, 4, 5] 이런식으로요! 이번에 알아볼 tree구조 같은 경우는 non-linear(비선형 구조)에 해당하는 대표적인 데이터 구조입니다. Tree에도 몇가지 종류가 있는데, 가장 기본적인 tree, binary tree(바이너리 트리) 그리고 binary search tree(BST, 바이너리 서치 트리)에 대해 알아보도록 하겠습니다. 데이터 구조의 형태가 마치 나무를 거꾸로 돌려놓은 듯한 모습이라고 하여 트리라고 부릅니다. 트리 구조에서 알고 있어야 할 명칭들이 몇가지 있는데 하나씩 알아보겠습니다. 먼저, 각각의 데이터를(위 그림에서 동그라미 부.. 2022. 5. 28.
Data structure(자료구조)란? - Stack & Queue(스택과 큐) Data structure(DS)는 컴퓨터에서 데이터를 특정한 구조로 정리하여 데이터를 효율적으로 사용하기 위한 방법을 의미합니다. 자료구조의 종류는 다양한데, 지금까지 배워본 array나 collection framework에서 다룬 collection, map 등도 다 자료구조에 해당합니다! 생각해보면 각 자료구조들의 특징과 사용 방법이 조금씩 달랐습니다. 다량의 데이터를 한데 모아둔 것에 그치지 않고 데이터를 어떤 식으로 저장하고 이용할지 차이를 두었기 때문입니다. 이미 좋은 자료 구조들이 만들어져 있으니, 상황에 적절한 자료구조를 선택해서 사용할 수 있도록 하면 되겠습니다. ☺️ 이미 다룬 적이 있는 Array, LinkedList, Set은 제외하고 Stack, Queue, Tree, Graph.. 2022. 5. 27.
Enumeration(열거형 타입, enum) 알아보기 안녕하세요•ɞ•! 이번에는 줄여서 enum이라고 부르는 enumeration에 대해서 알아보려고 합니다. 먼저 enum을 한 줄로 얘기하자면 상수*(constants)의 집합으로 이루어진 특수한 Class데이터 타입입니다. *열거형상수, enmeration constants라고 부르기도 합니다. Enum의 상수들은 객체이며 따로 명시하지 않아도 public static final* 이기 때문에 instance 없이도 접근이 가능하고 변경이 불가능합니다. 또, 다른 class들과 마찬가지로 인스턴스 변수, 메서드, 생성자도 가질 수 있습니다. 그렇지만 다른 class와는 다르게 instance를 만들지 않고 사용하게 됩니다. 생성시에 앞에 enum이라는 keyword를 붙여주면 됩니다. 한 번 직접 생성해.. 2022. 5. 23.
LinkedList 사용하기 LinkedList는 지난번에 알아봤던 ArrayList와 마찬가지로 List interface를 implements하는 Collection framework의 class 중 하나입니다. ArrayList와 다른 점은 list 내부 요소의 추가와 삭제를 효율적으로 할 수 있다는 것입니다. 각각의 요소가 값 뿐만 아니라 link도 같이 가지고 있는데요, 데이터가 중간에 추가 또는 삭제될 때 뒤의 다른 데이터들이 자리를 옮길 필요없이 link의 연결만 수정해주면 되기 때문에 훨씬 효율적입니다. LinkedList의 선언과 초기화는 ArrayList와 유사합니다. 다이아몬드 표시 안에 타입을 넣어주면 됩니다. LinkedList placeToVisit = new LinkedList(); 사용하는 method도.. 2022. 5. 22.
Stream 사용하기(3) - 최종 연산의 종류와 방법 드디어 stream 가공과 사용의 마지막 단계인 최종 연산에 왔습니다. 🥳🥳 stream 연산자 리스트표가 있어서 한 번 가져와 봤습니다. Intermediate으로 적혀 있는 연산자는 지난번 포스팅에서 다루었고 이번에는 Terminal(최종)로 적혀있는 연산자를 알아보겠습니다. 최종 연산자 중에 return type이 Optional인 연산자들은 null값이 나올 경우를 대비하여 예외처리를 해주어야 하는데요, 이 경우는 뒷쪽에서 다루도록 하겠습니다. 1. forEach() 먼저 forEach는 이름에서도 바로 각각의 요소들에 대한 작업이 이루어질 것이란게 느껴집니다. 값을 하나씩 출력하고 싶을 때 사용하면 됩니다. List list = new ArrayList(){{ add("A1"); add("A2".. 2022. 5. 21.
Stream 사용하기(2) - 중간 연산의 종류와 방법 앞선 포스팅에서 배열이나 collection에 담겨있는 데이터들을 가공하기 위한 사전 작업인 stream 생성 방법에 대해 자세히 알아보았습니다. 이제는 드디어 가공을 해 볼 차례입니다 도표를 보시면 연산 종류에 따라서 어떤 method들이 있는지 나와있는데요, 이번에 알아볼 중간 연산에 해당하는 methods는 filter(), map(), peek(), boxed()가 있네요! 여기에 sorted(), distinct() 까지 더해서 알아보겠습니다. 참고로 중간 연산은 Stream type을 반환합니다. 그래서 IDE에서 추천(?) 코드 중에 반환 타입이 Stream이나 IntStream등 Stream type인 경우는 최종 연산이 아닌 중간 연산 method라고 보시면 됩니다. 1. filter().. 2022. 5. 20.
Stream 사용하기(1) - stream 생성 안녕하세요! 지금까지 다량의 데이터를 한번에 관리할 수 있게 해주는 Collections에 대해서 쭉 알아보았는데요, 이번에는 Collections 타입의 자료들과 배열을 더욱 손쉽게 가공할 수 있도록 해주는 Stream에 대해 알아보도록 하겠습니다. Stream은 1. 대용량 데이터의 복잡한 가공처리를 할 때 2. 컬렉션 데이터의 복잡한 가공처리를 할 때 (대용량이 아니어도!) 3. multi threading이 아닌 진짜 병렬처리 를 할 때 유용하게 사용된다고 합니다. 먼저 알아두어야 할 사항은 Stream은 declarative programming(선언형 프로그래밍) 형태로, 지금까지 사용해오던 imperative programming(명령형 프로그래밍)과는 사뭇 다른 코드 형태를 보인다는 것입니.. 2022. 5. 20.
반응형