❑ 객체를 정의해 놓은 것
❑ 객체를 생성하는데 사용됨
❑ 클래스 → (인스턴스화) → 인스턴스(객체)
❑ 객체는 실제로 존재하는 것(사물 또는 개념)이며 객체의 속성(멤버 변수)과 기능(메서드)에 따라 다르게 사용된다
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);