Tree 구조의 3가지 순회방식 구현! 저번에 tree 구조에 대해서 막막했던 시절을 회상하며, 직접 tree를 구현하고 순회방식도 구현해보기로 했습니다! 일단 tree구조를 만들기 위해서는 Node클래스와 Tree클래스를 만들어야 겠지요? 바로 코드부터 봅시다! class Node{ // 데이터를 저장할 노드를 담당한 클래스 Node 를 생성하여 int data; // int형의 데이터, 노드의 왼쪽,오른쪽 주소를 생성합니다. Node left; Node right; } class tree{ public Node root; // Node의 root를 생성하고, getter,setter를 통해 루트를 설정하는 메소드를 만듭니다. public void setRoot(Node node) { this.root..
Tree, TreeMap, TreeSet. 이번에는 tree에 대하여 정리 해볼려고 합니다! Tree? what the fxxk?? tree 구조는 무엇일까요? 일반적으로 저희가 나무(tree) 를 생각하면 나무는 기둥에서 여러가지 가지로 나뉘어서 흩어져 있습니다. 이러한 의미를 그대로 계승하여 네이밍을 한것이라고 생각하면 좋습니다! tree 구조란 : 최상위 Root값을 기준으로 왼쪽과 오른쪽으로 데이터들이 뻗어나가 있는 형태를 말합니다. 어? 그러면 저희가 알고있는 선형적 자료구조(list,map,set,array) 의 개념이랑 다르게 비선형적 자료구조라고 할수 있겠죠?? 여기서 비선형구조란, 계층도를 떠올리면 이해가 가기 쉬울겁니다. 한가지의 값을 기준으로 아래로 계속 계층적으로 뻗어나가는것입니다...
Stack Queue 자료구조 너무 간단하다. Stack LIFO(Last In First Out) 구조, 마지막에 저장된 것을 제일 먼저 꺼냅니다. Stack 메서드 push Stack에 객체를 저장합니다. pop Stack의 맨 위에 저장된 객체를 꺼냅니다. peek Stack의 맨 위에 저장된 객체를 반환합니다. Stack에서 꺼내지는 않습니다. 비었을 때 null을 반환합니다. empty Stack이 비어있는지 알려줍니다. 있으면 true, 없으면 false를 반환합니다. search Stack에서 주어진 객체를 찾아서 그 위치를 반환합니다. (배열과는 달리 1부터 시작합니다.) 💡 쉽게 말하면 Array의 종류 중 하나일뿐이고, 단순히 누가 먼저 출력이 되냐 차이!!!! 근데 스택은 요즘은 거의..
선형검색, 이진검색이란? 선형 검색(Linear Search) 다른이름으로 순차 검색(Sequential Search) 이라고도 하는 선형검색에 대하여 먼저 알아보겠습니다. 선형 검색은 데이터가 모인 집합(배열, LinkedList 등)의 처음부터 끝까지 하나씩 순서대로 비교하며 원하는 값을 찾아내는 알고리즘입니다. 쉽게 말해 index가 0부터 100까지 있다고 한다면, 찾고자하는 값이 어느 인덱스에 있는지 모르니! 인덱스 하나하나를 다 열어보면서 찾고자 하는 값이 해당인덱스를 열어봤을때 일치할때 까지 반복을 한다고 생각하면 됩니다. 즉, index 0 ~ 100 까지 반복 (100번 반복) for문으로 100번 회전하게 만들고 한번 회전할때마다 그 값이 일치하는지 알아보면 되겠죠??? 코드: int ..
내부클래스! ⇒ InnerClass 아무래도 프로그래밍 언어자체가 모두 영어로 되있고, 공부를 하는데에도 어느정도 영어를 알고있으면 매우 도움이 되기에 앞으로 모든 용어는 영어로만 쓰겠습니다 😂 InnerClass는 뭘까요? 이너클래스는 클래스안에 또 다른 클래스가 구성되있는겁니다. 찾아보니 주로 이벤트핸들러를 처리할 때나 안드로이드 앱을 개발할때 많이 쓴다고하네요. class A{ class B{ } public void disp(){ class C{ } } } 종류는 2가지로 나눠지는데요. Inner Member Class : 맴버 변수처럼 선언된 클래스 static, instance 클래스로 나뉩니다. Inner Local Class : 메소드안에 선언된 클래스. 지역변수처럼 선언 되있습니다. 메소..
대표적인 기초! 정렬방법을 알아보고 구현을 해보자! 정렬이란 뭘까요오? 일단 쉽게 말하자면 5,2,3,1,4 가 있다고 가정하면 이 숫자를 오름차순 혹은 내림차순으로 정리한 것도 정렬이라고 할수 있죠??? 이와 같이 숫자와 같은 데이터가 있을때 그걸 12345…. 혹은 987654… 이렇게 정리해도 정렬! 혹은 문자열이 있을때, a. , b~~ ,c~~~ 이렇게 사전처럼 앞글자를 기준으로 오름차순 내림차순 하는것도 정렬!! (솔직히 이게 이해가 안가면 개발자를 떠나서 디지게 맞아야함) ^^; 자 그렇다면 자바에서는 정렬을 언제 쓰고 왜 쓸까요?? 예를 들어 저희가 배열에 고객의 개인정보를 숫자에 넣어서 1~100 까지 무작위로 정리를 해놨다고 칩시다. 그러면 일단 배열은 직접 인덱스 번호를 쳐서 데이터를..
QuickSort (퀵정렬) 퀵정렬은 구동방식이 생각보다 간단합니다! 일단 배열의 한 기준점을 기준으로 왼쪽에는 기준점보다 작은 값을, 오른쪽에는 큰 값을 정렬 하는것 입니다. 그리고 나서 왼쪽에는 기준점보다 작은값들이 모여있겠지요?? 다시 왼쪽에 있는 배열 데이터로만 하여금 위 과정을 반복하고 반복하다 보면, 더이상 기준점을 기준으로 비교할 대상이 남아있지 않게 되는겁니다. 그러면 배열정렬 끗!!! 이 방법을 곧 “분할 정복(Divide and Conquer) “ 이라고 합니다. 문제를 작은 2개의 문제로 분리하고 각각을 해결한 다음, 결과를 모아서 원래의 문제를 해결하는 전략이다. 분할 정복 방법은 대개 재귀 호출을 이용하여 구현한다. 퀵 정렬의 장단점: 장점: 당연히 속도가 빠르고, 시간복잡도가( ..
Hash란 무엇일까요?? 아무래도 프로그래밍을 하다보면 자주 듣게 되는 단어인거 같은데 저는 잘 모르겠었거든요…. 그래서 한번 정리도 하고, 이해도 할겸 글을 써볼려고합니다! 일단 Hash라고 하면은 데이터를 처리하는 기법중 하나인데, 주로 저장,검색과 같은 기능을 구현할때 좋은 성능을 보여준다고하여 많은 쓰임새를 얻고 있습니다! Hash를 쓸때 중점적으로 알아봐야 할건? 바로 key, value 입니다! key와 value는 한쌍으로 존재를 하는데요 이것을 바로 Hash Table 이라고 부릅니다. Key는 Hash에서 매핑을 할 때 사용하는 인덱스. 라고 생각하면 전체적인 이해는 되는거 같습니다!! 그리고 Key는 절대로 중복이 되지 않습니다. 만약에 같은 Key에 또 다른 데이터를 넣게 되면 전에 ..
Collection API 는 언제 어떻게 쓸까요?? Collection 이란? 일단 간단하게 컬랙션은 배열이라고 생각하면 편합니다! 하지만 배열과 다른점이 있는데요. 그점을 핵심만 정리해봤습니다. 배열과 다르게 하나의 컬랙션에 서로 다른 여러가지 데이터형이 저장 가능하다! 참조 데이터 형만 저장 가능하다. 기본 데이터형은 Wrapper클래스를 이용하거나, 오토박싱으로 저장 가능합니다. 객체인 데이터를 저장할 때마다 크기가 자동으로 늘어난다. (유용하죠?) Generic 타입을 지원한다. (이건 추후에 다뤄볼게요 흠… AutoBoxing을 안다면 이해하기 조금 쉬울겁니다.) 메서드 설명 Object[] toArray() Collection에 저장된 객체를 배열로 변환시킵니다. Iterator iterat..
try { ArrayList list = new ArrayList(); BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); //String s = bf.readLine(); // 문자열로 입력받은 값을 s변수에 담아준다. StringTokenizer st = new StringTokenizer(bf.readLine()); while(st.hasMoreTokens()) { list.add(Integer.parseInt(st.nextToken())); } int hap=0; int avg=0; for(int i=0; i nextFloat(); 이렇게 단순하고 편하게 입력을 받고 그것을 갔다 썼는데 왜 BufferedReader를..
How to connect Oracle DB with JAVA? 오늘은 자바랑 오라클 데이터베이스를 연결하여 실제로 DB에 데이터를 INSERT, SELECT, DELETE, UPDATE 를 해보는 코드를 짜보도록 하겠습니다! 계획 ⇒ 서점 데이터베이스를 쿼리문을 이용해 구축한다 (ONLY TABLE) 자바에서 DB를 연결하기 위한 ORACLE JDBC를 다운받는다. 자바에서 DB를 연결시켜주는 API를 찾아서 정리해놓는다 ⇒ Class, Connection, PreparedStatement, ResultSet 사전에 준비한 테이블을 참고하여 자바에서 쿼리문을 실행할 수 있게 만든다. 코딩 순서 ⇒ DB를 연결시키기 위한 클래스를 생성한다. 사전에 필요한 변수들을 미리 선언해놓는다. (단 접근제한자는 p..
요즘 스프링부트에 빠져서 웹 개발을 하다보니 자바에 대한 중요성을 점점 잃어가는거 같아서 복습할겸 중요 포인트들을 글로 남기기로 했습니다 🙂 추상 클래스 (Abstract class) 추상 클래스는 구현부 내부에 추상 메소드가 하나 이상 포함되있거나 abstract 로 정의되어있는 경우를 의미합니다. abstract class 를 상속 받은 클래스는 (하위 클래스) 필요에 의해 정의된 메소드를 overriding 하여서 사용합니다! 추상 클래스는 new연산자를 통하여 객체를 생성할 수 없습니다. 추상 클래스는 단일 상속만 가능합니다. 고로 일반변수를 가질 수 없습니다. 공통된 필드와 메소드를 정의해놓고 일반 클래스가 상속을 받을시 코드를 작성하는 시간을 절약할수 있습니다. 추상 클래스와 일반 클래스(하위..
Static 이란 뭘까요? static : 영단어를 직역하면 말 그대로 “고정된” 이란 의미를 가지고있다. static이라는 키워드를 사용하여 메소드나 변수를 만들 수 있는데 다른 말로는 정적 필드와 정적 메소드를 생성한다고 할 수 있다. 이 둘을 합쳐놓으면 정적맴버라고 말할 수 있다. 정적 필드와 정적 메소드는 인스턴스(객체)에 소속된 맴버가 아니고 클래스에 고정된 맴버이다. 이말은 즉슨 타 클래스에서 객체를 생성해 해당값을 바꾸면 또 다른 클래스에서 쓰고 있는 정적필드 혹은 정적메소드의 값도 달라지는 것이다. 클래스 로더가 클래스를 로딩하고 메소드 메모리 영역에 넣을때 클래스별로 관리가 된다. 그래서 클래스 로딩이 끝나면 어디든지 다 사용할 수 있다. Ex) 클래스명.변수명 을 사용하여 접근할 수 있..
2차원 배열에 대해서 생각을 정리해봤다. 2차원 배열은 뭘까요오오? (일단 배열이 먼지 복습 먼저 하고갑시다 !!!) 배열(Array) : 동일한 자료형(Type)의 데이터를 연속된 공간에 저장하기 위한 자료구조이다. 장점: 연관된 데이터를 저장하기 위한 변수의 선언을 줄여준다. 반복문과 같은 ~~문을(메소드...등등) 이용하여 계산과 같은 과정을 쉽게 처리할수 있다. 단점: 배열의 길이는 가변형태가 아니다. 데이터값이 증가하면 배열의 크기를 재설정 해줘야 한다. 배열안에는 같은 자료형만 올 수 있다. Ex) int,String 이 같이 담기는건 불가능 (추후에 Object을 다루게 되면 가능하다.) 그렇다면 2차원 배열은 뭐가 다를까? 2차원 배열(Array) : 동일한 자료형(Type)의 데이터를 연..
위에 제목을 이해하기 위해선 일단! 기본 자료형 Type, Wrapper클래스 에 대해서 알아야 합니다 😟 기본 자료형 Type : int(정수), long(정수), float(실수), double(실수), boolean(논리식) ….etc Wrapper Class : Integer, Long, Float, Double, Boolean …etc 이렇게 보여주면 아!!! 이거!! 이러고 있을테니 지나갑니다 흠. 박싱과 언박싱에 대한 개념을 먼저 살펴보자 ! 박싱 : 기본 타입 데이터에 대응하는 Wrapper 클래스로 만드는 동작 언박싱 : Wrapper 클래스에서 기본 타입으로 변환 // 박싱 int i = 10; Integer num = new Integer(i); // 언박싱 Integer num = ..