분류 전체보기
-
람다식이랑 조금 친해져보자!Java 2022. 8. 26. 02:35
1. Intro 중복된 코드를 어떻게 줄일 수 있을까를 고민하다 돌고돌고돌고돌아가서 해결은 했지만, 코드의 복잡성은 해결하지 못한 슬픈 코드가 있었습니다. 피드백 코드를 분석하면서 왜 그렇게 돌고 돌아갔는지를 깨닫게 되었습니다. 람다식...! 람다식을 스트림 내에서 사용하는 것에만 익숙해져있었기 때문에 해결법을 떠올리지 못했습니다. 자바 8부터 도입된 람다식을 이제 메서드의 파라미터로 전달하는 연습을 해보도록 하겠습니다. 2. 구현해야 되는 기능 기준점이 되는 좌표가 있습니다. 기준점과 x축이 같은 좌표와 y축이 같은 좌표를 추출해야합니다. A: (10 ,10) standard.getX() == point.getX()) .filter(point -> standard.getY() == point.getY(..
-
추상클래스와 인터페이스를 적용해 코드 구현하기 (1)이론Java 2022. 8. 21. 22:13
🔗 https://docs.oracle.com/javase/tutorial/java/IandI/abstract.html 위 링크를 참고하였으며, 이해가 안되는 부분은 스킵하였습니다. 예시 코드를 찾아보고 추가 작성할 예정입니다. 0. 목표 상속과 인터페이스를 적용해 코드를 구현하려고 한다. 인터페이스를 구현한 추상 클래스가 있고, 서브 클래스에서 이 추상 클래스를 상속하여 사용할 것이다. 코드를 구현하기에 앞서 어떤 기능을 추상 클래스로 만들고 인터페이스로 만들어야 하는지 두 개념부터 알아보자. 1. 추상메서드와 추상클래스 ? 추상클래스는 abstract 가 선언된 클래스이다. 추상클래스에는 추상메서드가 포함될 수도 있고 포함되지 않을 수도 있다. 추상클래스는 인스턴스화(new Class) 할 수 없지만..
-
compareTo() 메소드와 오름차순, 내림차순이 무슨 상관?Java 2022. 8. 14. 20:27
무지성으로 코딩하다 객체가 가진 속성을 기준으로 내림차순을 하려고 한다. Comparable 인터페이스의 compareTo(T o) 메소드를 구현하려다가 "아 현재 인스턴스에서 비교 인스턴스 속성을 빼는 거였나? ...그 반댄가?" 그간 구현에만 집중했다. 일단 해보고 결과가 반대로 나오면 반대로 연산해서 코드를 구현해놓고, 이따가 알아보고 자야지 하고 잊고 넘어갔다. 지금 구현하고 있는 코드의 예시를 통해 이해하고 넘어가자. 예시 코드와 출력문 자동차에 랜덤한 숫자가 부여되고 랜덤 값이 4이상일 경우 전진한다. 이를 구현하기 위해 정의해 놓은 Car 코드는 다음과 같다. (compareTo 메소드를 살펴보기 위해서 중간 코드들은 생략함) public class Car implements Comparab..
-
[자료구조] 스택, 큐, 딕셔너리Stage/Computer Science 2021. 6. 2. 19:04
학습 목표 스택, 큐, 딕셔너리의 원리와 구조를 설명할 수 있다. 1. 큐 사람들이 큐 방식으로 줄을 서있다. 맨 앞 줄에 서있는 사람이 먼저 들어가고, 줄 서 있는 순서대로 입장을 할 것이다. 큐는 값이 아래로 쌓이는 구조인데, 값을 넣고 뺄 때 먼저 들어간 데이터가 먼저 나가는 방식이다. 이를 선입선출 또는 FIFO(First In First Out)라고 한다. 큐는 배열이나 연결리스트를 통해 구현이 가능하다. 2. 스택 책들이 스택 방식으로 쌓여 있다. 사람들이 책을 한 권씩 가져가야 한다고 한다면 보통 사람들은 책이 쌓여 있는 순서대로 책을 한 권씩 가져갈 것이다. 스택은 값이 위로 쌓이는 구조이다. 맨 밑에 깔려 있는 책은 제일 처음 놓여졌을텐데 가장 나중에 들어온 책이 가장 먼저 나가게 되는 ..
-
[자료구조] 트라이Stage/Computer Science 2021. 6. 2. 18:59
학습 목표 트라이의 원리와 구조를 설명할 수 있다. 왜? 문자열의 길이가 일정한 경우 이 문자열들을 저장하고 관리하는 데 최적의 자료 구조는 무엇일까? 연결 리스트, 트리, 해시 테이블이 최선의 방안이 될 수 있을까? 이번엔 트라이라는 자료 구조에 대해 알아보자. 1. 트라이? 트라이는 retrieval의 약자로, 기본적으로 트리형태의 자료 구조이고, 문자열을 빠르게 탐색하게 해주는 자료구조이다. 즉 문자열 탐색에 특화된 자료구조이다. 특이한 점은 각 노드가 배열로 이루어져있다는 것이다. 예를 들어 알파벳으로 이루어진 문자열 값을 저장한다고 한다면, 이 노드는 a부터 z까지의 값을 가지는 배열이 된다. 그리고 이 알파벳은 다음 층의 노드(a~z까지의 배열)를 가리킨다. Hermione, Harry, Ha..
-
[자료구조] 해시 테이블Stage/Computer Science 2021. 6. 2. 08:44
학습 목표 해시 테이블의 원리와 구조를 설명할 수 있다. 왜? 연결리스트나 트리에서는 값을 검색할 때 O(n) 또는 O(log n)의 시간이 걸렸다. 이 시간을 조금 더 단축해서 거의 O(1)에 가깝게 할 수도 있을까? 이것을 가능하게 해주는 해시 테이블이라는 자료 구조에 대해서 알아보자. 1. 해시 테이블? 해시 테이블은 연결 리스트의 배열이다. 여러 값들을 바구니에 나눠 담는 상황을 생각해보자. 각 값들은 해시 함수라는 맞춤형 함수를 통해서 어떤 바구니에 들어갈지 결정이 된다. 각 바구니에 들어가있는 값이 여러 개라면 그 값들은 그 바구니에서 새롭게 정의되는 연결 리스트로 이어진다. 한 바구니에 1, 3, 4가 들어있다면 1, 3, 4는 연결 리스트로 이어진다. 이처럼 연결 리스트가 담긴 바구니가 여..
-
[자료구조] 연결리스트 : 트리Stage/Computer Science 2021. 6. 2. 08:21
학습 목표 트리의 구조를 설명하고 활용하는 코드를 작성할 수 있다. 1. 트리 트리는 연결리스트를 기반으로 한 새로운 데이터 구조이다. 연결리스트에서는 각 노드들의 연결이 1차원적으로 구성되어 있다면, 트리에서 각 노드들의 연결은 2차원적으로 구성되어 있다고 볼 수 있다. 연결리스트에서 각 노드들이 다음에 오는 노드를 가리키는 메모리 주소를 기억하고 있었다면, 트리에서 노드는 다음에 오는 노드들을 가리키고 있다. 이 그림은 트리의 예를 보여주고 있는데, 나무가 거꾸로 뒤집혀 있는 모습을 생각해보면 된다. 가장 높은 층에서 트리가 시작되는 노드를 루트라고 한다. (4번 노란색 노드) 연결 리스트에서 node 라는 이름의 구조체에서는 *next 필드가 정의 되어 있었다면, 그림에서 보면 알 수 있듯이 트리는..
-
[자료구조] 연결 리스트 : 코딩 그리고 시연Stage/Computer Science 2021. 6. 1. 23:27
학습 목표 연결 리스트를 구현하고 사용할 수 있다. 연결 리스트와 배열의 장단점을 설명할 수 있다. 1. 코드 #include #include //연결 리스트의 기본 단위가 되는 node 구조체를 정의합니다. typedef struct node { //node 안에서 정수형 값이 저장되는 변수를 name으로 지정합니다. int number; //다음 node의 주소를 가리키는 포인터를 *next로 지정합니다. struct node *next; } node; int main(void) { // list라는 이름의 node 포인터를 정의합니다. 연결 리스트의 가장 첫 번째 node를 가리킬 것입니다. // 이 포인터는 현재 아무 것도 가리키고 있지 않기 때문에 NULL 로 초기화합니다. node *list ..