본문 바로가기

Backend Study/Java

(19)
[JAVA]링크드리스트로 큐 구현하기 (Queue) 큐는 먼저 들어온 것이 먼저 나가는 구조이다. 은행에 먼저 온 사람이 빠른 번호표를 부여받고, 먼저 나가는 원리를 생각하면 쉽다. 이 구조를 구현하기 위해서는 큐에서 나갈 차례를 기억하고 있어야하는데, 이를 위해서 몇가지 장치가 필요하다. 많이 사용하는 용어들이 있다. (1) Enqueue: 큐 맨 뒤에 어떤 요소를 추가한다. 마지막으로 온 손님에게 번호표를 발부해주는 것과 비슷하다. (2) Dequeue: 큐 맨 앞쪽의 요소를 삭제한다. 손님의 업무가 끝나면 번호표를 삭제하는 것과 비슷하다. (3) front: 큐의 맨 앞 위치이다. 다음 서비스를 받을 손님 번호의 역할을 한다. (4) Peek: front에 위치한 데이터를 읽는다. 다음 서비스를 받을 손님의 번호를 확인한다. (5) rear: 큐의 ..
[JAVA] 오버로딩 vs 오버라이딩 1. 오버 로딩 하나의 클래스에 같은 이름의 메서드를 여러개 정의하는 것이다. 조건: 1) 메서드의 이름이 같아야한다. 2) 매개변수의 개수 또는 타입이 달라야한다. 3) 매개변수는 같고 리턴 타입이 다른 경우는 오버로딩이 성립되지 않는다. 대표적인 예시: System.out.println 메서드 void println() void println(boolean x) void println(char x) void println(double x) * 잘못된 예시 int add(int a, int b) { return a+b; } long add(int a, int b) {return (long) (a+b); } 2. 오버라이딩 조상클래스로부터 상속받은 메서드의 내용을 상속받는 클래스에 맞게 변경하는 것이다..
[JAVA] JVM, JRE, JDK 차이 1. JVM JVM은 자바 가상머신 (Java Virtual Machine)의 약자이다. JVM은 자바 소스코드로부터 만들어지는 자바 바이너리 파일(.class)을 실행할 수 있고, 컴파일된 바이너리 코드는 어떤 JVM에서도 동작시킬 수 있다. 하지만, 플랫폼에 의존적이라 리눅스 JVM과 윈도우즈 JVM은 다르다. 2. JRE JRE는 자바 실행환경 (Java Runtime Environment)의 약자이다. JRE는 JVM이 자바 프로그램을 동작시킬 때 필요한 라이브러리 파일들과 기타 파일들을 가지고있다. 3. JDK JDK는 자바 개발도구 (Java Development Kit)의 약자이다. JDK는 JRE + 개발을 위해 필요한 도구(javac, java)등 들을 포함한다. 자바 소스 코드를 작성하..
[JAVA] Garbage Collection 1. 가비지 컬렉션이란? 가비지란 쉽게 말하면 유효하지 않은 메모리이다. C나 C++에서는 프로그래머가 수동으로 메모리 할당과 해제를 일일이 해줘야한다. 반면 자바는 JVM에 있는 가비지 컬렉터가 메모리 관리를 도와주고 있다. 따라서 개발자는 메모리 누수 문제는 고려하지 않고 개발에만 집중할 수 있다. 가비지 컬렉션 (Garbage Collection)은 GC라고 불리기도한다. 자바의 메모리 관리 방법중 하나로 JVM의 Heap 영역에서 동적으로 할당했던 메모리 중에서 필요없는 영역을 주기적으로 삭제하는 프로세스이다. * Heap 이란 ? [JAVA] 힙 메모리 사용율 1. 자바의 힙 공간이란? 자바 프로그램이 시작되면 JVM 즉 Java Virtual Machine이 운영 체제에서 일부 메모리를 가져온..
[JAVA] 쓰레드, 프로세스, 멀티 쓰레드 1. 프로세스와 스레드 프로그램 : 실행 가능한 파일 (HDD, SSD) 프로세스 : 실행중인 프로그램 (메모리), 자원과 쓰레드로 구성 쓰레드 : 프로세스 내에서 실제 작업을 수행, 모든 프로세스는 최소한 하나의 쓰레드를 가지고 있다. 싱글 쓰레드 프로세스 = 자원 + 쓰레드 멀티 쓰레드 프로세스 = 자원 + 쓰레드 + 쓰레드 + 쓰레드 멀티 프로세싱 = 멀티 태스킹 : 동시에 여러 프로세스를 실행시키는 것 멀티 쓰레딩 = 하나의 프로세스 내에 동시에 여러 쓰레드를 실행시키는 것, 같은 프로세스 내의 쓰레드들은 서로 자원을 공유한다. (효율적이라는 장점이 있지만, 동기화나 교착상태에 신경써야한다.) 멀티 스레드로 구현된 프로그램을 실행하면? - 하나의 프로세서는 한번에 스레드 1개밖에 실행시키지 못한다..
[JAVA] 컬렉션 프레임워크 1. 컬렉션 프레임워크란? 컬렉션: 여러 객체를 모아놓은 것을 의미한다. 프레임워크: 표준화, 정형화된 체계적인 프로그래밍 방식이다. 컬렉션 프레임워크: 다수의 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합을 의미한다. 즉, 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해둔 것이다. 일반 배열과 가장 큰 차이점은 정적 메모리 할당이 아닌 동적 메모리 할당 방식으로, 공간이 필요한만큼 추가할 수 있다는것이다. 2. 컬렉션 프레임워크의 핵심 인터페이스 List: 순서가 있는 데이터의 집합, 데이터의 중복을 허용한다. 구현 클래스: ArrayList, LinkedList, Stack, Vector 순서 O, 중복 O Set: 순서를 유지하..
[JAVA] 제어자, 다형성, 인터페이스, 내부 클래스와 익명 클래스 1. 제어자란? - 클래스, 변수, 메서드의 선언부에 사용되어 부가적인 의미를 부여한다. - 접근 제어자: public, protected, default, private - 그 외: static, final, abstract, native 1.1 static - 클래스의, 공통적인 멤버 변수 : 모든 인스턴스에 공통적으로 사용되는 클래스변수가 된다. 클래스변수는 인스턴스를 생성하지 않고도 사용 가능하다. 클래스가 메모리에 로드될 때 생성된다. 메서드: 인스턴스를 생성하지 않고도 호출이 가능한 static 메서드가 된다. static 메서드 내에서는 인스턴스 멤버들을 직접 사용할 수 없다. 1.2 final - 마지막의, 변경될 수 없는 클래스, 메서드, 멤버변수, 지역변수에 사용 가능 1.3 abstr..
[JAVA] 상속 1. 상속의 정의와 장점 1.1 상속이란? - 두 클래스를 조상과 자손으로 관계를 맺어주는 것이다. - 자손은 조상의 모든 멤버를 상속받는다. (생성자, 초기화블럭 제외) - 조상의 변경은 자손에 영향을 미치지만, 자손의 변경은 조상에 아무런 영향을 미치지 않는다. - 자바는 단일 상속만을 허용한다. class child extends Parent{} /* 허용하지 않음 */ class TVCR extends TV, VCR{ } 2. Object 클래스 - 모든 클래스의 최고 조상이다. - 조상이 없는 클래스도 자동적으로 Object 클래스를 상속받게된다. - 모든 클래스는 Object 클래스에 정의된 11개의 메서드를 상속받는다. toString(), equals(Object obj), hashCode..