목록Java/Java의 정석 (20)
Hyunebee
배열의 복사 - copyOf() : 배열 전체 - copyOfRange : 배열의 일부를 복사해서 새로운 배열을 만들어 변환한다. 지정된 범위의 끝은 포함하지 않는다. 배열 채우기 - fill() : 배열의 모든 요소를 재정된 값으로 채운다. - setAll() : 배열을 채우는데 사용할 함수형 인터페이스를 매개변수로 받는다. ex) Arrays.setAll( 배열이름, () -> lamda식 ) 배열의 정렬과 검색 - sort() : 배열을 정렬 - binarySearch() : 반드시 배열이 정렬된 상태이어야 올바른 결과를 얻는다. 만일 검색한 값과 일치하는 요소가 여러개라면 어떤 것의 위치가 반활될지는 알 수 없다. 이것은 순차검색이 아니라 이진검색이기 때문에 검색속도가 상당히 빠르다. 배열의 출력..
Stack, Queue Stack은 선입후출 구조이고 Queue는 선입선출구조인다. 순차적으로 데이터를 추가하고 삭제하는 Stack에는 ArrayList와 같은 배열기반의 컬렉션클래스가 적합하다. Queue는 데이터를 꺼낼때 마다 첫번째가 삭제됨으로 LinkedList가 더 적합하다. ArrayList로 할경우 삭제되면서 빈공을 채우기 위해 배열의 복사가 일어남으로 메모리에 낭비가 있다. ex ) import java.util.*; class StackQueueEx { public static void main(String[] args) { Stack st = new Stack(); Queue q = new LinkedList(); // Queue인터페이스의 구현체인 LinkedList를 사용 st.pu..
Collection Framework Collection Framework은 데이터 군을 저장하는 클래스들을 표준화한 설계를 뜻한다. Collection Framework은 크게 3가지의 인터페이스를 가지고 있다. -List : 순서가 있는 데이터의 집합, 데이터의 중복을 허용한다. -Set : 순서를 유지하지 않는 데이터의 집합, 중복을 허용하지 않는다. -Map : key, value를 사용하는 데이터 집합 순서는 유지하지 않으며 키의 중복은 허용x, 값의 중복은 허용한다. list와 set의 공통된 부분을 뽑아 만든 Collection도 존재한다. List Interface Set Interface Map Interface
abstract class - 추상 클래스 추상 클래스는 미완성 클래스이며 상속을 통해 완성해주어야 한다. 추상 클래스는 추상메서드를 포함하고 있다는 것을 제외하고는 일반 클래스와 다른게 없다. abstract method - 추상 메서드 추상 메서드는는 메서드의 선언부만 작성해서 사용하는 것을 추상 메서드라고 한다. abstract를 붙혀주는 이유는 자손 클래스에서 추상메서드의 상속을 강요하기 위해서이다. Interface 인터페이스 또한 추상클래스와 비슷하다 인터페이스는 추상화클래스 처럼 추상메서드를 같이만 abstract보다 추상화 정도가 높기 때문에 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으로 가질 수 없다. 상수와 추상메서드만을 구성원으로 가지고 있을 수 있다. interface 인터페이..
다형성 객체 지향에서 다형성은 여러 가지 형태를 가질 수 있는 능력을 의미한다. 자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함으로써 다형성을 구현하였다. class Tv{ boolean power; int channel; void power(){ } void channelUp(){ channel++; } void channelDown(){ channel--; } } class CaptionTv extends Tv{ String context; void caption() { } } Tv t = new Tv(); 부모타입 : 업캐스팅(형 변환 생략가능) 자손타입
제어자 제어자는 클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여해준다. 접근제어자 - public, protected, default, private 그 외 - static final, native, transient, synchronized, volatile, strictfp static static은 인스턴스와 상관없이 항상 일정한 값을 가진다. 하나의 변수를 모든 인스턴스가 공유하기 때문이다. static은 멤버변수, 메소드, 초기화 블럭에서 사용한다. 멤버변수 모든 인스턴스에서 사용되는 공통된 변수 인스턴스를 생성하지 않고 사용할 수 있다. - 클래스가 메모리에서 로딩될때 같이 생성 메서드 인스턴스를 생성하지 않고 사용할 수 있다. static 메소드 안에서는 인스턴스 멤..
오버라이딩 조상클래스에서 상속받은 메소드를 재구성해서 사용하것을 오버라이딩이라고 한다. class Car{ void Engine(){ System.out.println("자동차입니다."); } } class superCar extends Car{ @Override void Engine() { System.out.println("슈퍼카입ㅂ니다."); } } 이처럼 상속받은 메소드를 변경해서 사용할 수 있다. 여기서 주의할점 - 메소드의 이름이 같아야 한다. - 메소드의 매개변수가 같아야 한다. - 메소드의 반환타입이 같아야 한다. 즉 선언부가 같아야 한다. 여기서 접근제어자와 exception은 변경할 수 있다. -접근제어자는 조상 클래스의 메서드보다 좁은 범위로 변경할 수 있다. -조상클래스의 excep..
상속 상속이란 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다. 이러한 특성은 코드의 재사용성을 높이고 코드의 중복을 제거하여 프로그램의 생산과 유지보수에 크게 기여한다. 사용법은 상속받고자 하는 클래스에 extends와 상속시킬 클래스를 지정해주면 된다. ex class Child extends Parent{ } 이때 Parent는 조상클래스 Child는 자손클래스라고 한다. 다른 말로는 부모클래스 - 자식클래스, super-sub, base-derived 라고 표현하기도 한다. 부모클래스와 자식클래스의 관계 class Parent{ int age; } class Child extends Parent{ void MethodA(){ System.out.println("Method A"); } ..