본문 바로가기

분류 전체보기

스택(Stack), 큐(Queue), 그리고 덱(Deque) 자료구조 중에는 LIFO(Last In First Out: 후입선출)과 FIFO(First In First Out: 선입선출)가 있습니다. 스택(Stack)과 큐(Queue)가 바로 그러한 형태를 띄고 있습니다. (출처: https://blog.naver.com/coolten/140057846054) stack: '~을 쌓다.' -> '가장 마지막에 쌓은 것을 뺀다.'뭐 이렇게 생각하시면 잘 기억나겠죠?두 가지 자료구조를 사용하는 예는 아래와 같습니다. Stack: JVM 스택 메모리-> JVM 스택 메모리에 저장된 변수는 나중에 저장된 변수부터 제거Queue: 스레드풀-> 작업 큐가 먼저 들어온 작업부터 처리 그리고 스택과 큐의 장점을 모두 합친 것이 바로 덱(Deque)입니다.Double Enable..
컬렉션 프레임워크란 개발을 하다보면, 다수의 객체를 저장해두고 필요할 때마다 꺼내서 사용하는 경우가 많습니다. 배열을 사용하는 것이 가장 단순해보이지만,, 배열의 문제점은1. 생성을 했다면 크기가 고정적이다.2. 특정 인덱스의 자료가 삭제되었을때, 확인이 불편하다. 이를 해결하기 위해 널리 알려져 있는 자료구조를 바탕으로 객체를 효율적으로 추가, 삭제, 검색할 수 있도록 만들어놓은 인터페이스, 클래스들을 컬렉션 프레임워크라고 총칭합니다. 자바로 개발을 할때 자주 보이는 아래와 같은 것들이죠. - List: 순서 유지 / 증복 저장 O- ArrayList: 객체 삭제시 앞당겨짐- Vector: 멀티스레드에서 안전하게- LinkedList: 빈번한 객체 +/-가 있을때- Set: 순서 유지 / 중복 저장 X (Iterator ..
제네릭이란 자바 API 도큐먼트를 보면 거의 대부분이 꺽쇠괄호()가 포함되어있습니다. 이 꺽쇠괄호는 제네릭 표현인데, 제네릭이 무엇인지 알아보겠습니다. 제네릭은 클래스, 인터페이스, 메서드를 정의할 때 특정 멤버의 타입을 파라미터로 지정할 수 있도록 하는 것을 말합니다. 우선 제네릭을 사용하지 않았을 때를 살펴보겠습니다. Object 타입, 따라서 모든 타입을 담을 수 있는 Box라는 클래스에 여러 타입의 객체를 담아보겠습니다. [Box.java] [Main.java] Main 클래스를 보시면 주석처리된 부분과 같이 다소 불필요해 보이는 타입변환이 일어나는 것을 확인할 수 있습니다. 제네릭을 사용해보겠습니다. 제네릭 멤버를 만들 땐, 해당 멤버명 옆에 를 사용해 파라미터로 지정할 타입을 정해줍니다. [Generic..
프로세스, 스레드 프로세스: 실행중인 하나의 어플리케이션스레드: 하나의 프로세스 내의 코드 실행 흐름(작업) 따라서,프로세스는 각자 할당받은 메모리를 가지고 있기 때문에, 서로 독립적이고,스레드는 다른 스레드에 영향을 미치게 됩니다.
Java equals(), hashCode()의 차이 자바를 처음 공부할 때 많이 헷갈렸던 내용입니다.재정의하지 않은 기존의 equals() 메서드는 비교 연산자인 ==와 동일한 검사를 합니다. 즉, 객체가 참조하고 있는 주소값을 비교하는 것이죠. 실제로 메서드를 사용할 때를 기준으로 기억하시는 것이 더 좋을 듯 합니다. equals(): 같은 객체이건, 다른 객체이건 객체가 저장하고 있는 데이터가 동일한지 검사hashCode(): 동일 객체인지 검사
32비트, 64비트 차이 컴퓨터를 사용하다 보면, 특히나 프로그램을 설치할 때32비트, 64비트중 자신의 OS에 맞는 버전을 다운 받아야 하는 경우가 많습니다. 우선,,1. 어떤 단위로 데이터를 전송하느냐가 다릅니다.문자 그대로 각각 32비트, 64비트 단위로 데이터를 전송합니다. 비트 단위는 2의 거듭제곱꼴로 표현되므로64비트는 32비트보다 2의 32거듭제곱만큼 더 큰 단위로 데이터를 처리합니다. 그리고 2. 메모리(RAM) 용량이 차이납니다.메모리에 대한 개념을 먼저 보시면,, 아래와 같은데 --------------------------------------------------------------------------메모리: 컴퓨터의 기억장치 RAM(Random Access Memory): 프로그램이 실행되는 동안 필요..
인터페이스, 추상 클래스의 차이 클래스와 인터페이스의 차이, 즉, 상속과 구현의 차이는 비교적 명확하다고 생각합니다. 대략, 아래처럼 숙지하고 있었습니다. 상속: 기존의 것을 재사용하여 코드의 중복을 줄인다. 개발시간을 줄인다.구현: 설계 지침을 따른다. (인터페이스는 다중 상속이 가능하다.) --------------------------------------------------------------------------------------- 그러다 문득,추상 클래스와 인터페이스의 구별이 모호해 한번 알아보았습니다. 우선 정의만 본다면, 이 둘은 설계 지침서에 가깝습니다. 메서드를 명시만 하고, 실제 구현내용이 없으며그것을 상속, 구현하는 클래스에게 구현을 강제합니다. 여기서 중요한 점이 있는데,일반 클래스가 하나라도 추상 메서드..
Getter, Setter를 사용하는 이유 일반적으로 프로그래밍을 할 때,객체들의 데이터(필드)를 외부에서 직접적으로 접근하는 것을 막아놓습니다. 필드들을 private 접근 제한자로 막아두고,각 필드의 Getter, Setter로 접근하는 방식을 사용합니다. 이렇게 프로그래밍 하는 이유는 객체의 무결성을 보장하기 위함입니다. 예를들어 Man이라는 클래스에 weight(몸무게)라는 필드가 존재할 때weight는 0보다 작을 수 없으나, 외부에서 직접적으로 접근할 경우,weight에 -100이라는 값을 줌으로써 객체의 무결성이 깨지는 일이 발생합니다. 이를 방지하기 위해,필드를 private로 만들어 외부의 접근을 제한한 후,Setter를 사용해 전달받은 값을 내부에서 가공해 필드에 넣어주는 방식을 사용하고 마찬가지로 필드 값을 가져올 때도,Get..