업캐스팅

상위 클래스로 변수를 선언하고 하위클래스의 생성자로 인스턴스를 생성한다

Customer customer = new VipCustomer();

이때 인스턴스는 VipoCustomer가 만들어졌지만 타입은 Customer이므로접근할 수 있는것은 Customer의 변수와 메서드이다.(VipCustomer()생성자에 의해 VipCustomer 클래스의 모든 멤버변수가  메모리에는 생성됨)->다운캐스팅을하면?

 

 

VipCustomer vCustomer = new VipCustomer();
	addCustomer(vCustomer);

	int addCustomer(Customer customer){
	}

하위클래스는 상위 클래스의타입을내포하고있으므로상위 클래스로 묵시적 형변환이 ㄱ가능함

상속관계에서 모든 하위클래스는 상위 클래스로 형변환(업캐스팅)이 된다.

 

업캐스팅을 사용하는 이유 OR 장점 예시

다형성, 하나의 인스턴스(슈퍼클래스)로 서브클래스를 전부 관리할 수 있다.

Class Juice{
public void make(){
System.out.print("쥬스만들어");
}
}

Class OrangeJuice{
@Override
public voidmake(){
System.out.print("오렌지쥬스 만들어");
}
}

Class AppleJuice{
@Override
public void make(){
System.out.print("사과쥬스 만들어");
}
}

Class Customer{
public void drink(Juice juice2){
juice2.make();
}
}
public class Cafe{
public static void main(String[] args){
{
Customer customer = new Customer();
Juice juice1= new OrangeJuice();

customer.drink();

}
}

--> 오버라이드된 오렌지쥬스 만들어가 출력된다. 만약 업캐스팅을 사용하지 않는다면 일일이 조건문으로 확인해서 적절한 drink문을 실행하게 될것임

public void drink(Juice juice1)
{if(juice1의 종류가 사과쥬스?)
{
juice1.drink();/
}
else if(juice1의 종류가 오렌지 쥬스?)
{
juice1.drink();
}
}

참고 :https://woochan-autobiography.tistory.com/201

https://velog.io/@smallcherry/Java-UpCastingAndDownCasting, https://chilas-it.tistory.com/70, https://jhost.tistory.com/27, https://madplay.github.io/post/java-upcasting-and-downcasting

https://velog.io/@programmerpark94/%EC%83%81%EC%86%8D%EC%97%90%EC%84%9C-%ED%81%B4%EB%9E%98%EC%8A%A4-%EC%83%9D%EC%84%B1-%EA%B3%BC%EC%A0%95%EA%B3%BC-%ED%98%95-%EB%B3%80%ED%99%98%EC%97%85%EC%BA%90%EC%8A%A4%ED%8C%85

 

https://www.inflearn.com/questions/47449

 

'자바' 카테고리의 다른 글

불변객체,final  (0) 2022.06.28
람다와 함수형 인터페이스  (0) 2021.10.23
자바프로그램의 동작,  (1) 2021.10.17
[Java]List Interface  (0) 2021.09.18
java 환경변수 3가지 셋팅  (0) 2017.05.05

객체 지향 프로그래밍에 있어서 불변객체(immutable object)는 생성 후 그 상태가 바뀌지 않는 객체

class Employee{
String name="hello"
String city="seoul"

}

이 값들이 변하지 않음

final 이 붙었다고 불변객체를 보장하지 않는다. final은 상태가 바뀌지 않는것으로

아래와 같이 조치를 모두 취해진게 불변객체라 불릴수잇음

 

불변 객체를 만드는 방법

이펙티브 자바에서는 클래스를 불변으로 만들기 위해 다음의 다섯 가지 규칙을 따르라고 한다.

  • 객체의 상태를 변경하는 메서드(변경자)를 제공하지 않는다.
    • 즉, setter 등의 메서드를 사용하지 않는다.
  • 클래스를 확장할 수 없도록 한다.
    • final 클래스로 선언 등의 방법으로 상속을 막는다.
  • 모든 필드를 final로 선언한다.
  • 모든 필드를 private으로 선언한다.
  • 자신 외에는 내부의 가변 컴포넌트에 접근할 수 없도록 한다.
    • 클래스에 가변 객체를 참조하는 필드가 하나라도 있다면, 클라이언트가 그 객체의 참조를 그대로 반환받도록 하지 말고 방어적 복사를 수행해야 한다.

 

더보기

의문 : private final MemberRepository memberRepository = newMemoryMemberRepository();

코드에서final만 붙이면 memberRepository는 불변객체가 되는것일까??  -> 여기서 final은 재할당을

방지하기 위한 목적이라 생각하면 된다. 불변객체라고는 볼수없을듯

 

참고

https://velog.io/@conatuseus/Java-Immutable-Object%EB%B6%88%EB%B3%80%EA%B0%9D%EC%B2%B4

https://velog.io/@kbsat/final%EC%9D%80-%EB%B6%88%EB%B3%80%EC%9D%84-%EB%B3%B4%EC%9E%A5%ED%95%A0%EA%B9%8C

https://jins-dev.tistory.com/entry/Java-%EC%9D%98-Final-Object%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC

https://c-king.tistory.com/496#recentEntries

https://mangkyu.tistory.com/131

https://velog.io/@ohzzi/%EB%B6%88%EB%B3%80-%EA%B0%9D%EC%B2%B4Immutable-Object

'자바' 카테고리의 다른 글

업캐스팅, 다운캐스팅  (0) 2022.07.02
람다와 함수형 인터페이스  (0) 2021.10.23
자바프로그램의 동작,  (1) 2021.10.17
[Java]List Interface  (0) 2021.09.18
java 환경변수 3가지 셋팅  (0) 2017.05.05

함수형인터페이스는 추상메서드가 단 하나만 존재하는 인터페이스.

람다식은 함수형 인터페이스 기반으로 작성

@FunctionalInterface
interface Calculate{
int cal(int a, int b);
}

@FunctionalInterface 어노테이션을 붙여서 함수형 인터페이스에 부합하는지확인할 수 있다.

(컴파일타임에검사)

*static이나 default선언이 붙은 메서드의 경우 함수형 인터페이스에 영향을 끼치지는 않는다.

@FunctionalInterface
public interface Calculate{
int cal(int a, int b);

default int plus(int a, int b) { return a+b;}
static int sub(int a, int b){return a-b;}
}

인터페이스는 제네릭으로 사용 가능

 

함수형 인터페이스 종류(반환하는지, 매개변수 등에 따라 분류)

Function<T,R> T타입 인자 받고 R타입 객체 리턴

Consumer<T> T타입 인자 받고 리턴 없음

Runnable 인자도 안받고 리턴값도 없음

Predicate<T> T타입 인자 받고 결과로 boolean 리턴

Supplier<T> 인자를 받지않고 T타입 객체 리턴

[ 메소드 참조(Method Reference) ]

메소드 참조란 함수형 인터페이스를 람다식이 아닌 일반 메소드를 참조시켜 선언하는 방법이다. 일반 메소드를 참조하기 위해서는 다음의 3가지 조건을 만족해야 한다.

  • 함수형 인터페이스의 매개변수 타입 = 메소드의 매개변수 타입
  • 함수형 인터페이스의 매개변수 개수 = 메소드의 매개변수 개수
  • 함수형 인터페이스의 반환형 = 메소드의 반환형

참조가능한 메소드는 일반 메소드, Static 메소드, 생성자가 있으며 클래스이름::메소드이름 으로 참조할 수 있다. 이렇게 참조를 하면 함수형 엔터페이스로 반환이 된다. 3가지의 메소드에 대해 메소드 참조 예시를 자세히 살펴보도록 하자.

 

 

1. 일반 메소드 참조

예를 들어 위에서 보여준 Function에 메소드 참조를 적용한다고 하자. 우선 해당 메소드(length)가 위의 3가지 조건을 만족하는지 살펴보아야 한다.

  • 매개변수 없음
  • 매개변수 개수 = 0개
  • 반환형 = int

우리가 선언한 function과 String의 length 함수는 모두 매개변수가 없으며, 반환형이 int로 동일하기 때문에 String::length로 다음과 같이 메소드 참조를 적용할 수 있다.

// 기존의 람다식
Function<String, Integer> function = (str) -> str.length(); function.apply("Hello World");
// 메소드 참조로 변경 Function<String, Integer> function = String::length; function.apply
("Hello World");

또한 추가로 예시를 살펴보자. System.out.println() 메소드는 반환형이 void이며, 파라미터로 String을 받는 메소드이다. 그렇기 때문에 우리는 Consumer에 System.out.println() 메소드를 참조시킬 수 있다.

// 일반 메소드를 참조하여 Consumer를 선언한다. 
Consumer<String> consumer = System.out::println;
consumer.accept("Hello World!!");
// 메소드 참조를 통해 Consumer를 매개변수로 받는 forEach를 쉽게 사용할 수 있다.
List<String> list = Arrays.asList("red", "orange", "yellow", "green", "blue");
list.forEach(System.out::println); 
//interface Iterable<T> default void forEach(Consumer<? super T> action) 
{ Objects.requireNonNull(action); for (T t : this) { action.accept(t); } }

2. Static 메소드 참조

Static 메소드 역시 메소드 참조가 가능하다. 예를 들어 Objects의 isNull은 반환값이 Boolean이며, 매개변수 값은 1개이고, 매개 변수가 Object이므로 Predicate로 다음과 같이 메소드 참조가 가능하다.

Predicate<Boolean> predicate = Objects::isNull; 
// isNull 함수
public static boolean isNull(Object obj) { return obj == null; }


3. 생성자 참조

생성자도 메소드 참조를 할 수 있다. 생성자는 new로 생성해주므로 클래스이름::new로 참조할 수 있다. Supplier는 매개변수가 없이 반환값만을 갖는 인터페이스이기 때문에, 매개변수 없이 String 객체를 새롭게 생성하는 String의 생성자를 참조하여 Supplier로 선언할 수 있다.

Supplier<String> supplier = String::new;

'자바' 카테고리의 다른 글

업캐스팅, 다운캐스팅  (0) 2022.07.02
불변객체,final  (0) 2022.06.28
자바프로그램의 동작,  (1) 2021.10.17
[Java]List Interface  (0) 2021.09.18
java 환경변수 3가지 셋팅  (0) 2017.05.05

소스코드 파일 * .java     ->  바이트코드 파일  *.class

 

*.class는 JVM에서 읽음

JVM에서의 실행과정

  1. Class Loader를 통해 .class 파일들을 JVM에 올린다
  2. JVM에 있는 .class 파일들을 Execution Engine의 Interpreter와 JIT Complier를 통해 해석된다
  3. 해석된 바이트 코드는 Runtime Data Areas 에 배치되어 실질적인 수행이 이루어진다

 

       

Class Loader(Loading,linking,initializing)

자바프로그램을 실행하면 .java파일은 컴파일러를 통해 .class(자바 바이트코드)파일로 변환된다. Class Loader는 해당 파일을 Runtime(실행)하는 시점에 Runtime Data Areas에 로딩시킨다. 즉, 컴파일하는 시점이 아니라 클래스를 처음으로 참조하는 시점(클래스의 인스턴스를 만들 때) Class Loader를 통해 메모리(Runtime Data Areas)에 로드한다.

Runtime Data Areas

런타임 데이터 영역은 JVM이 OS 위에서 실행될 때 할당받는 메모리 영역이다.

- PC Register

현재 수행중인 JVM 명령의 주소가 저장되어있다. CPU의 Register와는 다름, 연산을 위해 필요한 피연산자를 임시로 저장하기 위한 용도로 사용한다.

- JVM Stack(메서드들 영역)..T메모리

Stack Frame을 저장하는 스택. JVM은 오직 Stack Frame을 push하고 pop하는 작업만 함. 예외 발생 시 printStackTrace() 등의 메서드로 보여주는 Stack Trace의 각 라인은 하나의 스택 프레임을 표현

  • Stack Frame(스택프레임) : 메서드가 수행될 때마다 하나의 스택 프레임이 생성되어 해당 스레드의 JVM 스택에 추가되고 메서드가 종료되면 스택 프레임이 제거된다. 각 스택 프레임은 Local Variable Array, Operand Stack, 현재 실행 중인 메서드가 속한 클래스의 Runtime Constant Pool 에 대한 레퍼런스를 갖는다. 지역 변수 배열, 피연산자 스택의 크기는 컴파일 시에 결정되기 때문에 스택 프레임의 크기도 메서드에 따라 크기가 고정된다.
  • Local Variable Array(지역변수 배열) : 0부터 시작하는 인덱스를 가진 배열. 0은 메서드가 속한 클래스 인스턴스의 this 레퍼런스이고, 1부터는 메서드에 전달된 파라미터들이 저장되며, 메서드 파라미터 이후에는 메서드의 지역 변수들이 저장된다.
  • Operand Stack(피연산자 스택) : 메서드의 실제 작업 공간. 각 메서드는 피연산자 스택 지역 변수 배열 사이에서 데이터를 교환하고, 다른 메서드 호출 결과를 push하거나 pop한다. 피연산자 스택 공간이 얼마나 필요한지는 컴파일할 때 결정할 수 있으므로, 피연산자 스택의 크기도 컴파일 시에 결정된다.

- Native Method Stack

자바 외의 언어로 작성된 네이티브 코드를 위한 스택이다. 즉, JNI(Java Native Interface)를 통해 호출하는 C/C++ 등의 코드를 수행하기 위한 스택으로, 언어에 맞게 C 스택이나 C++ 스택이 생성된다.

- Heap(객체들이 있는곳)..T메모리

인스턴스(객체)를 저장하는 공간. GC(Garbage Collection)의 대상이다. 성능 이슈를 일으키는 공간

- Method Area(스테틱영역 클래스들)

JVM이 읽어 들인 각각의 클래스와 인터페이스에 대한 Runtime Constant Pool, 필드와 메서드 정보, Static 변수, 메서드의 바이트코드 등을 보관한다. 이 영역에 있는 클래스 정보로 Heap 영역에 객체를 생성한다. 즉, 매우 중요한 영역!

메서드 영역은 JVM 벤더마다 다양한 형태로 구현할 수 있으며, 오라클 핫스팟 JVM(HotSpot JVM)에서는 흔히 Permanent Area, 혹은 Permanent Generation(PermGen)이라고 불린다. 메서드 영역에 대한 가비지 컬렉션은 JVM 벤더의 선택 사항이다.

  • Runtime Constant Pool(런타임 상수 풀) : 클래스 파일 포맷에서 constant_pool 테이블에 해당하는 영역이다. Method Area 에 포함되는 영역이긴 하지만, JVM 동작에서 가장 핵심적인 역할을 수행하는 곳이기 때문에 JVM 명세에서도 따로 중요하게 기술한다. 각 클래스와 인터페이스의 상수뿐만 아니라, 메서드와 필드에 대한 모든 레퍼런스까지 담고 있는 테이블이다. 즉, 어떤 메서드나 필드를 참조할 때 JVM은 런타임 상수 풀을 통해 해당 메서드나 필드의 실제 메모리상 주소를 찾아서 참조한다.

Execution Engine

Execution Engine  Class Loader를 통해 JVM 내의 Runtime Data Areas에 배치된 바이트코드를 실행한다. Execution Engine은 자바 바이트코드를 명령어 단위로 읽어서 실행한다

그런데 자바 바이트코드는 기계가 바로 수행할 수 있는 언어보다는 비교적 인간이 보기 편한 형태로 기술된 것이다. 그래서 실행 엔진은 이와 같은 바이트코드를 실제로 JVM 내부에서 기계가 실행할 수 있는 형태로 변경하며, 그 방식은 다음 두 가지가 있다.

  • Interpreter : 바이트코드 명령어를 하나씩 읽어서 해석하고 실행한다. 하나씩 해석하고 실행하기 때문에 바이트코드 하나하나의 해석은 빠른 대신 인터프리팅 결과의 실행은 느리다는 단점을 가지고 있다. 흔히 얘기하는 인터프리터 언어의 단점을 그대로 가지는 것이다. 즉, 바이트코드라는 ‘언어’는 기본적으로 인터프리터 방식으로 동작한다.
  • JIT(Just-In-Time) Compiler : 인터프리터의 단점을 보완하기 위해 도입된 것이 JIT 컴파일러이다. 인터프리터 방식으로 실행하다가 적절한 시점에 바이트코드 전체를 컴파일하여 네이티브 코드로 변경하고, 이후에는 해당 메서드를 더 이상 인터프리팅하지 않고 네이티브 코드로 직접 실행하는 방식이다. 네이티브 코드를 실행하는 것이 하나씩 인터프리팅하는 것보다 빠르고, 네이티브 코드는 캐시에 보관하기 때문에 한 번 컴파일된 코드는 계속 빠르게 수행되게 된다.

JIT 컴파일러 가 컴파일하는 과정은 바이트코드를 하나씩 인터프리팅하는 것보다 훨씬 오래 걸리므로, 만약 한 번만 실행되는 코드라면 컴파일하지 않고 인터프리팅하는 것이 훨씬 유리하다. 따라서, JIT 컴파일러를 사용하는 JVM들은 내부적으로 해당 메서드가 얼마나 자주 수행되는지 체크하고, 일정 정도를 넘을 때에만 컴파일을 수행한다.

GC

Garbage Collection은 메모리 관리를 위한 방법 중의 하나로, 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요없게 된 영역[Heap]을 해제하는 기능. (new 연산자를 이용한 객체)

Java GC는 객체가 garbage인지 판단하기 위해 reachability 개념을 사용하여 객체의 유효한 참조가 있다면 ‘reachable’ 로 없으면 ‘unreachable’ 로 구별하고, unreachable 객체를 Garbage로 간주하여 GC를 실행한다. 한 객체가 다른 객체를 참조하며, 다른 객체는 또다른 객체를 참조할 경우에는 유효한 최초의 참조가 무엇인기 파악해야 되는데, 이를 객체 참조의 root set이라고 한다.

Heap 영역에 있는 객체들에 대한 참조의 종류는 4가지이다.

  1. Heap 내의 다른 객체에 의한 참조
  2. JVM Stack, Java 메서드 실행 시에 사용하는 지역 변수와 파라미터들에 의한 참조
  3. Native Stack, JNI(Java Native Interface)에 의해 생성된 객체에 대한 참조
  4. Method Area 의 static 변수에 의한 참조

이들 중 Heap 내의 다른 객체에 의한 참조를 제외한 나머지 3개(JVM Stack, Native Stack, Method Area)가 root set으로, reachability를 판가름하는 기준이 된다. 즉 root set으로부터 시작한 객체들은 reachable이며, root set과 무관한 객체들이 unreachable 객체로 GC의 대상이 된다.

 

------------------------

Jit Compiler

자주쓰이는 코드는 JVM이 machine code로 컴파일해서 속도를 높임.

바이트코드를 native code로 변환하는 작업은 JVM내에 별도의 쓰레드에서 이루어진다.

컴파일 작업이 끝나면 jvm은 바이트코드대신 컴파일된 버전을 사용함

Garbage Collector

실행되면 해당스레드외 다른스레들은 잠시 멈춘다.

가비지 컬렉션 과정 - Generational Garbage Collection

GC에 대해서 알아보기 전에 알아야 할 용어가 있다. 바로 'stop-the-world'이다. stop-the-world란, GC을 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것이다. stop-the-world가 발생하면 GC를 실행하는 쓰레드를 제외한 나머지 쓰레드는 모두 작업을 멈춘다. GC 작업을 완료한 이후에야 중단했던 작업을 다시 시작한다. 어떤 GC 알고리즘을 사용하더라도 stop-the-world는 발생한다. 대개의 경우 GC 튜닝이란 이 stop-the-world 시간을 줄이는 것이다.

Java는 프로그램 코드에서 메모리를 명시적으로 지정하여 해제하지 않는다. 가끔 명시적으로 해제하려고 해당 객체를 null로 지정하거나 System.gc() 메서드를 호출하는 개발자가 있다. null로 지정하는 것은 큰 문제가 안 되지만, System.gc() 메서드를 호출하는 것은 시스템의 성능에 매우 큰 영향을 끼치므로 System.gc() 메서드는 절대로 사용하면 안 된다(다행히도 NHN에서 System.gc() 메서드를 호출하는 개발자를 보진 못했다).

(https://d2.naver.com/helloworld/1329..)

'자바' 카테고리의 다른 글

업캐스팅, 다운캐스팅  (0) 2022.07.02
불변객체,final  (0) 2022.06.28
람다와 함수형 인터페이스  (0) 2021.10.23
[Java]List Interface  (0) 2021.09.18
java 환경변수 3가지 셋팅  (0) 2017.05.05

Iterator<E> iterator();

첫번째원소부터 마지막까지 순서대로 리스트의 요소들을 반환한다

 

사용메서드 예) hasNext()

ListIterator

Iterator인터페이스를 상속받아 여러기능을 추가한 인터페이스로

Iterator인터페이스는 컬렉션 요소에 접근할때 한방향으로만 이동가능하지만

JDK1.2부터 제공된 ListIterator인터페이스는 컬렉션요소의 대체, 

추가 그리고 인덱스 검색등을 위한 작업에서 양방향으로 이동하는것을 지원

단, ListIterator 인터페이스는 List 인터페이스를 구현한 List 컬렉션 클래스에서만 listIterator() 메소드를 통해 사용할 수 있다.

사용메서드 예) hasNext(), hasPrevious()

--------------------------------------------------------------------------------------------------

<T> T[] toArray(T[] a);

 The followi9ng code can be used to dump the list into a newly allocated array of String:

String[] y = x.toArray(new String[0]);   

1. List를 toArray 메서드에 파라메터로 넘어가는 배열 객체의 size만큼의 배열로 전환한다.
2. 단, 해당 List size가 인자로 넘어가는 배열 객체의 size보다 클때, 해당 List의 size로 배열이 만들어진다.
3. 반대로 해당 List size가 인자로 넘어가는 배열객체의 size보다 작을때는, 인자로 넘어가는 배열객체의 size로 배열이 만들어진다.

때문에 string[0]으로하면 제일 작은 값이니 list의 크기에 맞춰서 적용된다.

 

List<String> stringList = new ArrayList<String>();
stringList.add("A");
stringList.add("B");
stringList.add("C");
        
String[] stringArray = stringList.toArray(new String[5]);

System.out.println("array size : " + stringArray.length);

출력결과->array size : 5

Object[] toArray();

반환된 배열은 이 list에서 해당 배열에 대한 참조를 유지 관리하지 않는다는 점에서 "안전"합니다. (즉, 이 list이 배열로 뒷받침되더라도 이 메서드는 새 배열을 할당해야 합니다

-> 호출한사람은 자유럽게 반환된 어레이를 수정할 수 있다.

둘다 배열로 반환하지만 차이점이 뭘까?

첫번째는 반환값이 T[], 두번째는 반환값이 Object[]이다.

It's to provide a type for the return and prevent any compile-time ambiguity.

the signiture for that method call is: <T> T[] toArray(T[] a)

wheras the empty parameter one is Object[] toArray()

 

 

------------------------------------------------------

equals

순서와 값이 같으면 true값

 

boolean add(E e);

 

리스트는 어떤게 리스트에 추가될지 제한을 둘수 있다. 예를 들면 null값들을 넣는걸 거부한다던가 혹은 특정타입의 elements들이 추가되는걸 제한할수 있다.  리스트 클래스에서는 어떤타입을 추가되는걸막을지 문서에 제한을 명시해야함

boolean addAll(Collection<? extends E> c);

하나하나 요소가 아니라 컬렉션을 뒤에다가 이어붙임 , 성공적으로 추가하면 true붙임

boolean addAll(int index, Collection<? extends E> c);

특정장소에서부터 컬렉션을 이어붙임

default void replaceAll(UnaryOperator<E> operator) {
Objects.requireNonNull(operator);
final ListIterator<E> li = this.listIterator();
while (li.hasNext()) {
li.set(operator.apply(li.next()));
}
}

default void sort(Comparator<? super E> c) {
Object[] a = this.toArray();
Arrays.sort(a, (Comparator) c);
ListIterator<E> i = this.listIterator();
for (Object e : a) {
i.next();
i.set((E) e);
}
}

void clear();

list요소제거

 

int hashcode();

리스트 e1.equals(e2)이면 e1.hashcode()==e2.hashcode();

이다.  -> list의 값에 따라 정해지는방식인것을 확인할 수 있따.

  int hashCode = 1;
     for (E e : list)
         hashCode = 31*hashCode + (e==null ? 0 : e.hashCode());

list of
 자바 9버전부터 지원하는 메서드

반환값은 특정 elements를 가지고있는 리스트를 반환한다.

반환값은 수정할수없는 리스트를 반환한다.

수정불가능한 리스트는 값을 삽입,null허용,변경 삭제등을 하지 못한다.(Unmodifiable lists)

사용하는이유는멀까?

They are unmodifiable. Elements cannot be added, removed, or replaced. Calling any mutator method on the List will always cause UnsupportedOperationException to be thrown. However, if the contained elements are themselves mutable, this may cause the List's contents to appear to change.

Spliterator

Spliterator는 Java8부터 사용할 수 있습니다. Map 구현과는 별도로 컬렉션 및 스트림 API를 반복하는 데 사용할 수 있습니다. Java Spliterator를 사용하여 목록을 분할 한 다음 반복하여 각 요소를 검색 할 수 있습니다. Iterator와 유사한 순차 반복을 수행 할 수도 있습니다. 조합 된 작업을 수행하는 단일 방법이 있습니다. hasNext()  next() Iterator 인터페이스의 메서드.

Java Spliterator의 주요 용도는 입력을 다른 부분으로 분할 한 다음 각 부분을 병렬로 개별적으로 처리하는 것입니다. 병렬 프로그래밍을 통해 많은 양의 데이터를 처리하는 것이 유용합니다.

 

 

 

 

 

------------------------------------------------------

package Interface_form;
 
/**
 * 
 * 자바 List Interface입니다. <br>
 * List는 ArrayList, SinglyLinkedList, DoublyLinked에 의해 각각 구현됩니다.
 * 
 * @author st_lab
 * @param <E> the type of elements in this list
 *
 * @version 1.0
 * 
 */
 
public interface List<E> {
 
	/**
	 * 리스트에 요소를 추가합니다.
	 * 
	 * @param value 리스트에 추가할 요소
	 * @return 리스트에서 중복을 허용하지 않을 경우에 리스트에 이미 중복되는 
	 *         요소가 있을 경우 {@code false}를 반환하고, 중복되는 원소가
	 *         없을경우 {@code true}를 반환
	 */
	boolean add(E value);
 
	/**
	 * 리스트에 요소를 특정 위치에 추가합니다. 
	 * 특정 위치 및 이후의 요소들은 한 칸씩 뒤로 밀립니다.
	 * 
	 * @param index 리스트에 요소를 추가할 특정 위치 변수
	 * @param value 리스트에 추가할 요소
	 */
	void add(int index, E value);
 
	/**
	 * 리스트의 index 위치에 있는 요소를 삭제합니다.
	 * 
	 * @param index 리스트에서 삭제 할 위치 변수
	 * @return 삭제된 요소를 반환
	 */
	E remove(int index);
 
	/**
	 * 리스트에서 특정 요소를 삭제합니다. 동일한 요소가 
	 * 여러 개일 경우 가장 처음 발견한 요소만 삭제됩니다.
	 * 
	 * @param value 리스트에서 삭제할 요소
	 * @return 리스트에 삭제할 요소가 없거나 삭제에 실패할 
	 *         경우 {@code false}를 반환하고 삭제에 성공할 경우 {@code true}를 반환 
	 */
	boolean remove(Object value);
 
	/**
	 * 리스트에 있는 특정 위치의 요소를 반환합니다.
	 * 
	 * @param index 리스트에 접근할 위치 변수 
	 * @return 리스트의 index 위치에 있는 요소 반환 
	 */
	E get(int index);
 
	/**
	 * 리스트에서 특정 위치에 있는 요소를 새 요소로 대체합니다.
	 * 
	 * @param index 리스트에 접근할 위치 변수 
	 * @param value 새로 대체할 요소 변수 
	 */
	void set(int index, E value);
 
	/**
	 * 리스트에 특정 요소가 리스트에 있는지 여부를 확인합니다.
	 * 
	 * @param value 리스트에서 찾을 특정 요소 변수 
	 * @return 리스트에 특정 요소가 존재할 경우 {@code true}, 존재하지 않을 경우 {@code false}를 반환  
	 */
	boolean contains(Object value);
 
	/**
	 * 리스트에 특정 요소가 몇 번째 위치에 있는지를 반환합니다.
	 * 
	 * @param value 리스트에서 위치를 찾을 요소 변수  
	 * @return 리스트에서 처음으로 요소와 일치하는 위치를 반환.
	 *         만약 일치하는 요소가 없을경우 -1 을 반환 
	 */
	int indexOf(Object value);
 
	/**
	 * 리스트에 있는 요소의 개수를 반환합니다.
	 * 
	 * @return 리스트에 있는 요소 개수를 반환  
	 */
	int size();
 
	/**
	 * 리스트에 요소가 비어있는지를 반환합니다.
	 * @return 리스트에 요소가 없을경우 {@code true}, 요소가 있을경우 {@code false}를 반환 
	 */
	boolean isEmpty();
 
	/**
	 * 리스트에 있는 요소를 모두 삭제합니다.
	 */
	public void clear();
 
}

'자바' 카테고리의 다른 글

업캐스팅, 다운캐스팅  (0) 2022.07.02
불변객체,final  (0) 2022.06.28
람다와 함수형 인터페이스  (0) 2021.10.23
자바프로그램의 동작,  (1) 2021.10.17
java 환경변수 3가지 셋팅  (0) 2017.05.05

 

ㅇㅇㅇ

 

'자바' 카테고리의 다른 글

업캐스팅, 다운캐스팅  (0) 2022.07.02
불변객체,final  (0) 2022.06.28
람다와 함수형 인터페이스  (0) 2021.10.23
자바프로그램의 동작,  (1) 2021.10.17
[Java]List Interface  (0) 2021.09.18

+ Recent posts