목록전체 글 (37)
나는개발자니까

1. 스택영역과 힙영역의 차이점은 뭘까? 간단하게 말하면, 스택영역에는 기본형 변수가 저장이 되서 힙역역에는 객체가 저장된다. 2. 그럼 왜 스택에는 기본형만 저장이 되고, 힙영역에는 객체가 저장되는 걸까? 각자의 역할을 분류한 것이다. 스택에서의 변수는 변수의 역할을 하고 힙에서의 객체는 객체의 역할을 한다. 비유를 하자면 우리는 헬스장에서 락커룸을 흔하게 볼 수 있다. 나는 그것과 유사하다고 생각했다. 스택은 주머니에 락커번호가 써져있는 열쇠가 들어있고, 힙에는 락커안에 칸칸이 객체가 들어있는것과 같다. 이때 주머니는 스택영역, 락커번호는 객체의 주소값이고, 락커는 힙영역이다. 그리고 또 키포인트가 있다. 우리가 창고를 쓸때 어떤 목적으로 쓸까? 다시 쓸만한 물건을 적재 하고 위치를 기억해놨다가 다시..
자바는 왜 인터페이스를 사용할까? 이 내용은 다중 상속과 관련이 있다! 자바는 다중 상속의 다이아몬드 문제 때문에 다중 상속을 지원하지 않고 대신 C++에는 없는 인터페이스를 사용한다. 하위클래스의 코드를 수정하지 않은 상태로 확장하기 위해서이다. 예를 들어, 스마트폰에서 카메라, 문자, 전화를 실행한다고 해보자. 카메라를 실행하고 문자를 실행하고 전화를 실행하는 것은 다르게 작용한다. 그런데 스마트폰에 애플리케이션이 한개만 있는것이 아니라 여러개 있는데 애플리케이션에 따라 실행의 개념이 달라지면 매우 번거로울 것이다. 그래서 상속과 인터페이스를 사용한다. 단순히 애플리케이션이 실행한다는 인터페이스를 두고 각 애플리케이션이 메서드를 상속 받으면 각 애플리케이션의 실행한다라는 메서드는 수정할 필요가 없다...
자바에서의 다형성은 3가지에서 이야기 수 있다. 1. 오버라이딩과 오버로딩 (기본) 2. 상위 클래스와 하위 클래스 3. 인터페이스와 구현 클래스 1. 오버라이딩과 오버로딩 일단 오버라이딩과 오버로딩의 개념을 정리하고 차이점을 파악하자. 오버라이딩 (overriding) : 같은 메서드 이름, 같은 매개변수 (인자) 목록으로 상위 클래스의 메서드를 재정의 오버로딩 (overloading) : 같은 메서드 이름, 같은 매개변수 (인자) 목록으로 다수의 메서드를 중복 정의 단어의 뜻을 파악하면 좀 더 이해하기 편하다! * 여기서 인자라는 단어는 어떤걸까? 처음에는 인자와 매개변수를 메모리가 저장되는 부분에서 구분하려고 단어를 다르게 한 줄 알았다. 그러나 자바에서의 매개변수 (parameter, param)..
class Solution { public int solution(int order) { int answer = 0; // 1. 정수형 변수 order를 문자열로 변경한다. String orderString = Integer.toString(order); // 2. orderString을 각 자릿수를 배열로 만든다. String orderArray[] = orderString.split(); // 3. orderArray 배열의 각 인덱스 자료형을 정수형으로 바꾼다. for (int i = 0; i < orderArray.length; i++) { Integer orderArrayInteger[i] = orderArray[i].parseInt; } // 4. for문으로 배열에 3, 6, 9가 있는지 검..
객체지향의 상속은 기존에 알고 있던 상속의 개념과 달리 재사용과 확장이다. 상위 클래스의 특성을 하위 클래스에 상속하고 거기에 더해 필요한 특성을 추가할 수 있다. 재사용 -> 상위 클래스의 특성을 하위 클래스에 상속한다. 확장 -> 거기에 더해 필요한 특성을 추가할 수 있다. 아래 단어들은 동의어지만 정확한 이해를 위해 상위 클래스와 하위 클래스, 슈퍼 클래스와 서브 클래스 용어를 사용하자. (그냥 상속 (X), 재사용, 확장, 세분화 (O)) 부모 클래스 = 상위 클래스 = 슈퍼 클래스 자식 클래스 = 하위 클래스 = 서브 클래스 상속 관계에서 반드시 만족해야 할 문장이 있다. 하위 클래스는 상위 클래스다. 포유류는 동물이다. 고래는 포유류다. 고래는 동물이다. 상속의 개념에서 객체와 클래스를 잘 구..
기수 정렬 (Radix Sort) 다른 정렬은 많이 들어보았는데 기수 정렬은 생소하다! 기수 개념 : ?? 기수 정렬 (radix sort) : 낮은 자리수부터 비교하는 정렬 알고리즘이다. 비교 연산을 하지 않아 정렬 속도가 빠르지만 데이터 전체 크기에 기수 테이블의 크기만한 메모리가 더 필요하다. 1. 기수만큼 큐를 이용해 저장공간을 생성한다. 2. 데이터의 1의 자리가 같은 숫자들끼리 저장공간에 넣는다. 3. 저장공간에 저장된 데이터를 순서대로 꺼내 기존 데이터에 덮어쓴다. 4. 데이터의 10의 자리를 기준으로 저장공간에 넣는다. 5. 마지막 자리수까지 정렬의 기준이 될 자리수를 늘리며 정렬한다. (이미지 찾는중...) 기수 정렬 (Radix Sort)의 시간 복잡도 기수 정렬은 데이터의 삽입과 추출..

머지 정렬 (Merge Sort) 머지 정렬 : 원소가 저장되어 있는 배열을 계속 나눠서 길이가 1인 배열을 만들고 정렬하면서 합치는 알고리즘이다. (머지 정렬 = 병합 정렬 = 합병 정렬 모두 같은 말이다.) 머지 정렬 (Merge Sort)의 시간 복잡도 머지 정렬은 이진 트리 형태로 나누기 떄문에 가질 수 있는 최대 깊이는 log n이다. 각 원소별로 합쳤으므로 시간 복잡도는 O(nlogn)이다. 머지 정렬 (Merge Sort)의 구현 public class Main { public static int[] src; public static int[] tmp; public static void main(String[] args) { src = new int[](1, 9, 8, 5, 4, 2, 3, ..

힙 정렬 (Heap Sort) 힙 트리 구조 (Heap Tree Structure)를 이용하여 정렬하는 방법이다. (최대힙 트리나 최소힙 트리를 사용한다.) 1. 내림차순일 경우 데이터를 최대힙으로 구성하고 오름차순일 경우 최소힙으로 구성한다. 2. 최대힙의 경우 루트노드는 해당 트리에서 항상 최대값을 가지고 있으므로 삭제를 반복하면 다음 최대값이 루트노드가 되어 최종적으로 내림차순 정렬이 된다. 3. 반대로, 최소힙의 경우?? 힙 정렬 (Heap Sort)의 시간 복잡도 힙 생성 알고리즘의 시간 복잡도는 O(log N)이다. 전체 데이터의 갯수가 N개이므로 시간 복잡도는 O(N * log N)이다. 힙 정렬 (Heap Sort)의 구현 import java.util.Arrays; import java...