전체 글

★ 다형성 여러가지 형태를 가질수 있는 능력 조상 타입 참조 변수로 자손 타입 객체를 다루는것 자손 타입의 참조 변수로 조상 타입의 객체를 가리킬수 없다 class Tv { boolean power; int channel; void power() { power = !power } void channelUp() { ++channel; } void channelDown() { --channel; } } class SmartTv extends Tv { String text; void caption() { // 내용내용... } } 지금까지 우리가 객체를 생성할땐 Tv t = new Tv(); SmartTv s = new SmartTv(); 이렇게 진행했다. 하지만 다형성은 다르다. Tv t = new Smar..
상속(Inheritance) 기존의 클래스로 새로운 클래스를 작성하는것( 코드의 재사용 ) 두 클래스를 부모와 자식으로 관계를 맺어주는것 class 자식 클래스 extends 부모 클래스 { // ... } class Parent {} class Child extends Parent { // ... } Child는 Parent를 상속받고 있다 이를 상속 관계라고 한다. 자손은 조상(부모의 부모)의 모든 멤버를 상속받는다. ( 생성자, 초기화블럭 제외 ) 이는 선택사항이 아니라 무조건 받아야한다. 자손의 멤버 갯수가 조상보다 적을 수는 없다. class Parent { int age; } class Child extends Parent { } 만약 이렇다면 Child이 가지고 있는 멤버는 부모(Parent..
이쯤에서 슬슬 앞의 정렬을 까먹은분을 위해 짧막 상식 우리가 배웠던 정렬의 방식을 짧게 설명하고자 한다 1. 계수 정렬 = 들어온 숫자를 배열로 받아서 들어온 숫자를 카운트하여 정렬 2. 선택 정렬 = 인덱스의 순서대로 숫자를 지정하며 해당 숫자를 직접 찾아 둘이서 교환 3. 삽입 정렬 = 뒷자리 숫자와 앞자리 숫자를 비교하고 더 작은 숫자를 비교하고 해당 숫자의 앞자리가 본인보다 작은것을 찾을때 까지 비교한다. 과정(우리는 오름차순을 기준으로 한다.) 1. 앞에서부터 현재 원소와 바로 다음의 원소를 비교한다. 2. 현재 원소가 다음 원소보다 크면 원소를 교환한다. 3. 다음 원소로 이동하여 해당 원소와 그 다음 원소를 비교한다. 거품 정렬은 정렬규칙이 있다 총 라운드는 (배열 크기 - 1)번 진행하고 ..
선택 정렬은 말 그대로 현재 위치에 들어갈 데이터를 찾아 선택하는 알고리즘이다. 데이터를 비교하며 들어가기 때문에 "비교정렬" 정렬의 대상이 되는 데이터 외에 추가적인 공간을 필요로 하지 않기 때문에 "제자리 정렬" 마지막으로 "불안정 정렬"이다. 과정을 알아보자 주어진 리스트에서 최솟값을 찾는다. 최솟값을 맨 앞 자리의 값과 교환한다. 맨 앞 자리를 제외한 나머지 값들 중 최솟값을 찾아 위와 같은 방법으로 반복한다. 저런식으로 배열을 하는것이 선택 정렬이다 중요한것이 있다 그림으로는 표현하지 않았지만 index8까지는 계속해서 정렬하고 마지막 인덱스를 제외하고 정렬을 마친다 그 이유는 N-1개가 정렬이 되어있다는 뜻으로 결국 마지막 원소는 자연적으로 최댓값이 되었다는 뜻이다. 구현은 나의 깃허브에 해놓..
Collection 자료구조의 대해서 배워보자 우리는 배열을 정렬할때 대부분 Arrays.sort와 Collections.sort를 사용한다 두개의 차이점은 코드에서 부터 크게 차이가 난다. public void arrayTest() { int[] arr = {1,2,3,4,5}; Arrays.sort(arr); public void CollectionTest() { ArrayList list = new ArrayList(); Collections.sort(list); 정확히 다룬건 아니지만 이런식으로 사용하는것을 볼 수 있다. 그럼 이제 중요한것은 왜 나누냐는 것이다. 그리고 눈으로 보이는 확연한 차이점 인스턴스화와 제네릭을 왜 사용하게되는건지도 한번 알아보고자 한다. Collections.sort 자..
우리는 개발을 하다 보면 뗄래야 뗄수없는것이 하나 있다. 바로 Git이라는건데 오늘은 그중 Git명령어를 배워보려고한다. Git을 시작하게 되면 가장 먼저 해주면 좋은것이 나의 github닉네임과 이메일을 집어넣어주는것이다. git config --global user.name+(닉네임) = 나의 Github닉네임이다 git config --global user.email+(이메일) = 나의 이메일을 적는다. 이렇게 하면 git에 나의 정보가 입력이 된다. 신원을 확인한 상태로 시작한다 그럼 이제 파일을 만들고 거기에 있는 파일을 올리는 과정을 알아보자 그전에 알아둬야 할 것이 있다. 로컬 저장소 (Local Repository) : 내 컴퓨터에 저장된 프로젝트 폴더 원격 저장소 (Repository) ..
우선순위 큐와 힙은 정말 많이 닮았다. 오죽하면 우선순위 큐 = 힙이라고 아는 분들도 적지 않을 것이다. 결론만 말하자면 둘의 차이는 우선순위 큐는 ADT(Abstract Data Type)이고 힙은 Data Structure이다. ※큐(Queue) = 먼저 들어오는 데이터가 먼저 나가는 구조(FIFO - First In First Out) ADT(Abstract Data Type) "추상적 자료형"이라는 뜻이다. 있는 그대로를 해석해 보자면 핵심 개념이나 기능을 간추려 내어 데이터를 식별하는 구분, 연산, 저장 방법 등을 모두 포함한 것 추상화를 통해 얻어낸 자료형 이게 무슨 말이냐면 자료 구조와는 달리 구현내용은 명시하지 않는다. 오로지 인터페이스만 제공할 뿐 특징이 있다. ● 추상화를 통해 정의된다..
힙은 우선순위 큐가 이용하는 자료구조가 된다. 힙이란? 최솟값 또는 최댓값을 빠르게 찾아내기 위해 완전이진트리의 형태로 만들어진 자료구조 이말을 뜯어서 말하자면 완전 이진 트리 형태 빠르게 찾기 최댓값 or 최솟값 이 3가지가 충족해야 힙 상태가 만들어진다는것이다. 그럼 완전 이진 트리 부터알아보자 1. 완전 이진트리 이와 같은 구성을 트리 구조라고 부르고 최종 자식노드들을 제외한 각 노드(동그라미)들이 자식을 2개씩(이진) 가지고 있는 것을 완전 이진트리 라고 한다. 완전 이진트리는 약간의 조건이 있다 1. 마지막을 제외한 모든 노드들이 채워져 있어야 한다 2. 모든 노드들은 왼쪽부터 채워져가야 한다.' 이런식으로 힙은 완전 이진 트리가 되어있는것을 기본으로 한다. 구현을 할 때에도 이 이미지를 생각하..
시간복잡도가 굉장히 빠른 counting sort에 대해 알아보자 카운팅 정렬의 메커니즘을 알아보자 짧게 얘기하자면 데이터의 값이 몇 번 나왔는지 세주는 것(counting)이다. 말보단 그림으로 확인해 보자 1 Step) 우린 이런 배열을 받았다 index 0 1 2 3 4 5 6 7 8 vlaue 4 7 0 2 7 5 1 4 3 그럼 count정렬은 각 인덱스에 들어가 있는 숫자의 개수를 정해서 받은 숫자를 인덱스로, 들어온 횟수를 value로 지정한다. index 0 1 2 3 4 5 6 7 value 1 1 1 1 2 1 0 2 이런 식으로 각 인덱스로 들어온 숫자를 counting 해서 넣는 것이다. 2.Step) counting 한 배열을 누적합으로 바꿔준다. 0번째 인덱스와 1번째 인덱스 누..
Comparable 과 Comparator는 모두 Interface이다. 중요한것이 있다. 이 두 인터페이스를 "비교"할 때 사용하는것이다. 굉장히 중요하다. 두가지를 사용하고자 한다면 인터페이스 내에 선언된 메소드를 "반드시 구현"해야 한다. 왜냐? 인터페이스로 가져온것들은 껍데기에 불과하다 그안에 있는 메소드(부품)들을 사용하려면 인터페이스 안에 있는 메소드(부품)를 가져와야 인터페이스가 작동한다. Comparable 인터페이스에서는 CompareTo(T o)메소드가 선언되어있다. Comparable을 사용하려면 compareTo(T o)메소드를 정의(Override) 해주어야한다는것이다. Comparator가 가지고 있는 메소드는 굉장히 많다. 그중 우리다 구현해야 하는것은 단 하나 Comparat..
늦은산책
중얼중얼블로그