자바

링버퍼를 사용하면 디큐(deque)시 발생하는 요소 이동 문제를 해결할 수 있다. 2021/01/05 - [분류 전체보기] - 자바(JAVA)로 큐(Queue) 구현하기 public class IntQueue { private int max; private int num; private int[] que; private int front; private int rear; // 예외 : 큐가 비어 있음 class EmptyIntQueueException extends RuntimeException{ } // 예외 : 큐가 가득 참 class OverflowIntQueueException extends RuntimeException{ } public IntQueue(int capacity){ num = fr..
public class IntAryQueue { private int max; // 큐 용량 private int num; // 현재 데이터 수 private int[] que; // 큐 본체 private int front; private int rear; // 예외 : 큐가 비어 있음 class EmptyIntQueueException extends RuntimeException{ } // 예외 : 큐가 가득 참 class OverflowIntQueueException extends RuntimeException{ } public IntAryQueue(int capacity){ num = front = rear = 0; max = capacity; try { que = new int[capacity]..
public class IntStack { private int max; // 스택 용량 private int ptr; // 스택 포인터 private int[] stk; // 스택 본체 // 예외 : 스택이 비어 있음 class EmptyIntStackException extends RuntimeException{ } // 예외 : 스택이 가득 class OverflowIntStackException extends RuntimeException{ } // 생성자 public IntStack(int capacity){ ptr = 0; max = capacity; try { stk = new int[max]; }catch(OutOfMemoryError e){ max = 0; } } public int pu..
final Integer intObject = 42; 자바5 이전에는 위의 코드를 컴파일러가 에러로 인지했다. 하지만 자바5버전에서는 컴파일러가 오토박싱(Autoboxing)이라는 기능을 사용해 int와 같은 참조타입은 Integer타입 값이라는 것을 알기 때문에 오류가 나지 않는다. 자바5 이전에는 new Integer(42); 또는 Integer.valueOf(42);를 사용했어야 했다. (Integer.valueOf()가 더 효율적인데 이유는 상수풀에 캐시를 하고 있기 때문이다.) 그렇다면 오토박싱(Autoboxing)의 반대말인 언박싱(Unboxing)이란 무엇일까? Float, Integer, Boolean 같은 박스된 참조타입을 원시타입인 float, int, boolean 타입으로 변경하는 ..
객체 지향 개발의 두가지 핵심 개념은 아래와 같다. 다형성(Polymorphism) 상속(Inheritance) 다형성(Polymorphism) 같은 자료형에 여러 가지 객체를 대입하여 다양한 결과를 얻어내는 성질 (동일한 조작방법으로 동작시키지만 동작방법은 다른 것을 의미한다.) 상속(Inheritance) 부모 클래스에서 클래스의 행동과 정의를 가져다 사용할 수 있게 해준다. 기존의 정의와 상태를 상속받아 사용할 수 있으며, 새로운 행동을 추가하거나 새로운 타입에 대한 행동을 오버라이드 할 수 있다. 정사각형(Square)는 사각형(Rectangle)이다. (is -a rectangle) 상속을 이용해 정사각형 만들기 public class Rectangle { private final int wid..
객체 => 상태와 행위가 존재함 (개체(entity)와 개체들에 관련된 연산을 제공하는 메서드들의 모음을 나타냄) 원시 타입(primitive type)을 제외하면 자바 언어의 다른 모든 변수들은 참조 타입이다. 객체는 참조 타입이다. 라는 말은 정확히 무엇을 의미하는 것일까? 원시 타입은 int i = 42로 변수가 선언되었을 때, 42라는 값이 메모리에 할당된다. 그러면 프로그램은 나중에 int j = i 라는 형식으로 i에 의해 표현되는 값이 j에 할당되었을 때 메모리의 다른 위치에 같은 값을 할당한다.(일단 할당하고 나면 i는 j의 값에 영향을 미칠 수 없다.) 그렇다면 객체 타입은 어떻게 동작할까 자바에서 new ArrayList(20)같은 구문은 데이터를 저장하는데 필요한 영역을 메모리에 요구..
리스트 정렬된 컬렉션 List 인터페이스를 사용 배열과 리스트의 관계 배열 JVM은 배열이 생성될 때 반드시 배열의 크기를 알아야 한다. final String[] stringArray = new String[3]; 배열의 원소에는 인덱스 값을 이용해서 직접 접근할 수 있다.(랜덤 접근 Random Access) 배열 전체를 사용 중일 때 원소를 추가하려면 배열 크기를 늘려야 한다. 배열 복사 후 새로운 배열이 원본 배열의 주소를 가리키도록 재할당 @Test public void arrayCopy(){ int[] integers = {0, 1, 2, 3, 4}; int[] newIntegersArray = new int[integers.length + 1]; System.arraycopy(integers..
익명 구현 객체 생성 인터페이스 타입으로 필드나 변수를 선언하고, 구현 객체를 초기값으로 대입하는 경우를 생각해보자. 구현 클래스를 선언하고, new 연산자를 이용해서 구현 객체를 생성한 후, 필드나 로컬 변수에 대입하는 것이 기본이다. class TV implements RemoteControl { } class A{ RemoteControl field = new TV(); void method(){ RemoteControl localVar = new TV(); } }그러나 구현 클래스가 재사용되지 않고, 오로지 해당 필드와 변수의 초기값으로만 사용하는 경우라면 익명 구현 객체를 초기값으로 대입하는 것이 좋다. 인터페이스 [필드|변수] = new 인터페이스("매개값", "..."){ // 인터페이스에 ..
람다식 람다식이란? 자바8부터는 객체 지향 프로그래밍과 함수적 프로그래밍을 혼합할 수 있게 람다식을 제공한다. 람다식은 익명 함수(anonymous function)를 생성하기 위한 식으로 객체 지향 언어보다는 함수 지향 언어에 가깝다. 람다식 -> 매개 변수를 가진 코드 블록 -> 익명 구현 객체 Runnable 인터페이스의 익명 객체를 생성하는 전형적인 코드 방식 Runnable runnable = new Runnable(){ public void run(){ ... } }; Runnable runnable = ()-> { ... }; 람다식은 "(매개변수) -> {실행코드}" 형태로 작성된다. 런타임 시에 인터페이스의 익명 구현 객체로 생성된다. 어떤 인터페이스를 구현할 것인가는 대입되는 인터페이스..
Comparable과 Comparator Comparable, Comparator 항상 헷갈리는 부분이다. 예전에 포스팅을 했지만 항상 까먹기 때문에,,, 책에 나온김에 다시 한번 정리할겸 포스팅을 한다. (https://cornswrold.tistory.com/23)TreeSet, TreeMap은 정렬을 위해 java.lang.Comparable 구현한 객체를 요구한다. 우리가 아는 Wrapper 객체는 모두 Comparable 인터페이스를 구현하고 있다.(Integer, Double, String ..)Comparable에는 compareTo() 메소드가 존재하고 적절하게 오버라이딩하여 정렬을 할 수 있게 한다. 리턴타입메소드설명 intcompareTo(T o)객체가 같으면 0 리턴 주어진 객체보다 ..
깡냉쓰
'자바' 태그의 글 목록