❑ 객체를 정의해 놓은 것
❑ 객체를 생성하는데 사용됨
❑ 클래스 → (인스턴스화) → 인스턴스(객체)
❑ 객체는 실제로 존재하는 것(사물 또는 개념)이며 객체의 속성(멤버 변수)과 기능(메서드)에 따라 다르게 사용된다
class SportsCar extends Car {}
class A {}
class B {
A a1;
A a2;
}
❑ 일반적인 클래스와 유사
❑ 단 추상 메서드를 포함하고 있다
abstract void method();
❑ 단일 상속만 가능
❑ 쉽게 말해 일종의 추상 클래스
❑ 오로지 추상 메서드와 상수만을 가질 수 있다
❑ 메서드의 public abstract 생략 가능하다
❑ 상수의 public static final을 생략할 수 있다
interface A {
public static final int age = 25;
public abstract void metod(int p1, int p2)
}
❑ 인터페이스만 상속을 받을 수 있으며 다중 상속이 가능하다
❑ 클래스가 인터페이스를 구현하며 다중 구현이 가능하다.(implements)
❑ 만약 인터페이스의 메서드 중 일부만 구현한다면 추상클래스여야 한다.
❑ 클래스는 상속과 구현은 모두 할 수 있다
힙 영역의 Permanent area(고정 영역)에 생성되어 Java 프로세스의 종료까지 계속 유지되는 메모리 영역이다. 기본적으로 JVM에서 관리하며 프로그래머가 작성한 상수에 대해서 최우선적으로 찾아보고 없으면 상수풀에 추가한 이후 그 주소값을 리턴한다. 메모리를 절약하는 효과를 가진다.
String 변수를 만들고 값을 할당하면 JVM이 String Pool에서 동일한 값의 String을 검색한다. 발견되면 Java 컴파일러는 추가 메모리를 할당하지 않고 메모리 주소값을 반환한다. 찾을 수 없으면 풀에 추가하고(interning) 해당 주소값을 반환한다.
String literal1 = "abc";
String literal2 = "abc";
// true
literal1 == literal2;
static 변수
final 변수
Java 상수에서 static과 final을 함께 사용하는 이유
함수형 인터페이스란?
추상 메서드를 하나만 가지고 있는 인터페이스
Java 8의 대표적인 함수형 인터페이스
boolean
을 반환한다. 조건에 맞는 경우 true를 조건에 맞지 않는 경우 false를 반환한다.Predicate<Integer> predicate = (num) -> num > 10;
predicate.test(21);
Consumer<Integer> consumer = (num) -> System.out.println(num);
consumer.accept(10);
Function<Integer, Integer> function = (num) -> num + num;
function.apply(10);
Comparator<Integer> comparator = (o1, o2) -> o1 - o2;
comparator.compare(1, 2);