[Java] 기본 지식

TPark·2020년 5월 23일
0
post-thumbnail

자바의 특징

  • JVM

    • JVM이라는 가상의 Virtual Machine을 거쳐서 실행된다. 이를 통해 운영체제에 구애받지 않고 JRE가 설치된 환경이라면 어디서든 실행 가능하다. 다만, 기계어로 바로 컴파일되지 않고 JVM을 한번 거치기 때문에 조금 느리다는 단점이 있다.
  • OOP

    • 객체지향언어이다. 캡슐화, 상속, 다형성을 지원하고 있으며 상속은 단 한개의 부모클래스만 허용한다. 그 이유는 다중 상속을 허용하면 설계를 잘해야 하는데, 모든 개발자가 잘 사용하지 못하니까 그냥 막아버렸다고 한다...
  • 함수적 스타일 코딩 지원

    • JAVA 8 부터 람다식을 지원하면서 함수적 스타일 코딩을 지원한다.
  • 메모리를 자동으로 관리한다

    • Garbage Collector가 알아서 사용하지 않는 자원을 관리해주기 때문에 C처럼 메모리를 할당하고 풀어주고 할 필요가 없다.
  • Java Reflection

    • 클래스를 런타임 시점에 동적으로 실행하게 하는 Reflection API를 제공한다
  • 오픈소스 라이브러리가 풍부하다

접근 제한자

private < default < protected < public

  • private: 클래스 내부에서만 사용 가능
  • default (package): 같은 패키지 내에서만 사용 가능
  • protected: 클래스를 상속받는 자식 객체 내에서까지 사용 가능
  • public: 모든 클래스에서 사용 가능

Overloading vs Overriding

  • overloading
    같은 이름을 가진 메소드들이 다른 매개변수를 가지는 경우
    ex) void hi() 와 void hi(int x)
  • overriding
    조상 클래스로부터 상속 받은 메소드를 자식 클래스에서 변경하는 경우

Generic

  • < T >
  • 여러개 사용 가능 <T, V>
  • 컴파일시 타입 체크 가능
  • Type casting 제거

Object vs Generic

  • Object를 사용할시 모든 객체를 허용하고 사용시마다 필요에 따라 형변환을 해줘야함
  • Generic 사용시 < T extends Collections > 처럼 허용되는 타입을 제한할 수 있고 형변환이 필요없음

와일드카드 타입(< ? >, < ? extends .. >, < ? super ... >)

  • < ? > : 제한 없음

  • < ? extends Parent > : Parent 자신과 자손클래스만 허용

  • < ? super Child > : Child 자신과 부모클래스만 허용

  • 언제 super을 사용하고 언제 extends를 사용해야 할까?

  • Oracle 에서는 이 문제를 In, Out 개념으로 설명한다. "In"변수는 extends 키워드를 사용하고, "Out"변수는 super 키워드를 사용한다.

  • 예를 들어, copy(src, dest) 라는 메소드가 있다고 가정했을때, src는 데이터를 제공하기 때문에 In이 되고, dest는 제공 받은 데이터를 받아서 사용하기 때문에 out이 된다.

객체 직렬화 (Serialization)

  • 객체를 바이트코드로 변환시켜서 저장시킴
  • Serializable 인터페이스를 implement 해야함

Interface vs abstract class

Equals와 HashCode

@Override
public int hashCode() {
    int hash = 7;
    hash = 31 * hash + (int) id;
    hash = 31 * hash + (name == null ? 0 : name.hashCode());
    hash = 31 * hash + (email == null ? 0 : email.hashCode());
    return hash;
}

Throwable, Exception, Error, RuntimeException

String, StringBuffer, StringBuilder

0개의 댓글