Java basic

yshjft·2022년 2월 10일
0

Java, OOP

목록 보기
1/27

✔︎ class

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

  • 상속
    • SportsCar는 Car이다(is-a)
    class SportsCar extends Car {}
  • 포함 관계
    • 한 클래스를 다른 클래스의 멤버변수로 선언
    • A는 B를 가지고 있다(has-a)
    class A {}
    class B {
            A a1;
            A a2;
    }
  • 단일 상속만 가능하다
  • 오버로딩 & 오버라이딩
    • 오버로딩
      • 메서드 이름이 같아야 한다
      • 매개변수의 개수 또는 타입이 달라야 한다
      • 기존에 없는 새로운 메서드 정의하는 것
    • 오버라이딩
      • 메서드 이름이 같아야 한다
      • 매개변수가 같아야 한다
      • 반환타입이 같아야 한다
      • 상속받은 메서드의 내용을 변경하는 것

✔︎ abstract class

❑ 일반적인 클래스와 유사
❑ 단 추상 메서드를 포함하고 있다

  • 추상 메서드(abstract method)
  • 선언부만 있고 구현부가 존재하지 않는다.
    abstract void method();
  • 상속을 통해 자식 클래스에서 이를 구현해주어야 한다.

❑ 단일 상속만 가능

✔︎ interface

❑ 쉽게 말해 일종의 추상 클래스
❑ 오로지 추상 메서드와 상수만을 가질 수 있다
❑ 메서드의 public abstract 생략 가능하다
❑ 상수의 public static final을 생략할 수 있다

interface A {
    public static final int age = 25;
    public abstract void metod(int p1, int p2)
}

❑ 인터페이스만 상속을 받을 수 있으며 다중 상속이 가능하다
❑ 클래스가 인터페이스를 구현하며 다중 구현이 가능하다.(implements)
❑ 만약 인터페이스의 메서드 중 일부만 구현한다면 추상클래스여야 한다.
❑ 클래스는 상속과 구현은 모두 할 수 있다

✔︎ 상수풀(constant pool)

힙 영역의 Permanent area(고정 영역)에 생성되어 Java 프로세스의 종료까지 계속 유지되는 메모리 영역이다. 기본적으로 JVM에서 관리하며 프로그래머가 작성한 상수에 대해서 최우선적으로 찾아보고 없으면 상수풀에 추가한 이후 그 주소값을 리턴한다. 메모리를 절약하는 효과를 가진다.

문자열 상수풀

String 변수를 만들고 값을 할당하면 JVM이 String Pool에서 동일한 값의 String을 검색한다. 발견되면 Java 컴파일러는 추가 메모리를 할당하지 않고 메모리 주소값을 반환한다. 찾을 수 없으면 풀에 추가하고(interning) 해당 주소값을 반환한다.

String literal1 = "abc";
String literal2 = "abc";

// true
literal1 == literal2; 

✔︎ static 변수 & final 변수

  • static 변수

    • 클래스 변수
    • 객체 생성 없이 접근할 수 있다.
    • 메모리 할당을 한번 하게 된다.
    • 모든 객체가 한 공간만 바로보게 된다.
    • 공유 개념
  • final 변수

    • 초기화된 값을 변경할 수 없다.
    • Static 변수의 경우 값과 함께 선언 & static 초기화 블록
    • 인스턴스 변수의 경우 값과 함께 선언 & 초기화 블록 & 생성자
  • Java 상수에서 static과 final을 함께 사용하는 이유

    • final만 사용하면 생성자를 이용해서 값을 변경할 수 있기에 객체마다 다른 값을 가질 가능성이 있다.
    • 참고

✔︎ 함수형 인터페이스

  • 함수형 인터페이스란?
    추상 메서드를 하나만 가지고 있는 인터페이스

  • Java 8의 대표적인 함수형 인터페이스

    • Predicate
      • boolean을 반환한다. 조건에 맞는 경우 true를 조건에 맞지 않는 경우 false를 반환한다.
      Predicate<Integer> predicate = (num) -> num > 10;
      predicate.test(21);
    • Consumer
      • 반환값은 없다.
      • 주어진 매개변수를 이용하여 작업을 수행한다.
      Consumer<Integer> consumer = (num) -> System.out.println(num);
      consumer.accept(10);
    • Function
      • 1개의 인자를 받고 1개의 객체를 리턴한다.
       Function<Integer, Integer> function = (num) -> num + num;
       function.apply(10);
    • Comparator
      • 정렬시에 사용
      • 특정 타입 인자 2개를 받아서 int 타입을 리턴한다.
      Comparator<Integer> comparator = (o1, o2) -> o1 - o2;
      comparator.compare(1, 2);

Java 8 함수형 인터페이스
Predicate
Consumer
Function

profile
꾸준히 나아가자 🐢

0개의 댓글