[Java] Java 기본 개념

­Valentine·2021년 12월 29일
0

CS

목록 보기
5/23

CS 공부 3일차! 역시 몰아서 쓰고 있지만.. 오늘은 Java의 기본 개념들에 대해서 정리해 보았습니다. 사진은 java 커피 사진

  • 장점 : OOP로서 응집력을 강화하고 결합력을 약화시켜 유지보수가 용이합니다. JVM위에서 플랫폼에 의존하지 않고 실행 가능하며 멀티스레딩을 지원합니다.

  • 단점 : 처리 속도가 느리며 예외처리가 불편합니다.

  • OOP

    • 객체지향(Object-Oriented)이란
    • 객체(Object)란 무엇인가
    • 객체지향 프로그래밍과 절차지향 프로그래밍의 차이 : 필드와 메소드가 절차지향에서는 분리되어있지만 객체지향에서는 하나로 합쳐져있다.
    • OOP의 4가지 특징 : 캡슐화, 상속, 다형성, 추상화
    • OOP의 5대 원칙 (SOLID) : SRP(Single Resposibility Principle), OCP(Open-Closed Principle), LSP(Liskov Substitution Principle), ISP(Interface Segregation Principle), DIP(Dependency Inversion Principle)
  • getter, setter : 캡슐화를 지향하기 때문에 메소드를 통해 데이터에 접근하도록 하는데 이때 이용되는 메소드. 객체에 값이 할당될 때 기준에 맞춰 예외처리를 할 수 있으며 데이터를 보호할 수 있다는 장점이 있습니다.

  • Multi-Thread

    • Runnable 인터페이스를 구현하거나 Thread를 상속받아서 구현할 수 있습니다. 멀티 스레드 환경에서 공유하는 자원이 있으면 오류가 발생할 수 있습니다. 이를 Collections의 synchronizedList와 같은 메소드를 활용하거나 synchronized, volatile 키워드를 객체에 붙이거나 Atomic Type의 변수를 사용하는 방식으로 동기화시켜 해결할 수 있습니다. 또한 wait과 notify 함수를 활용하여 critical section에 대한 접근을 제어할 수 있습니다.
    • Singleton Pattern : 객체의 인스턴스가 오직 1개만 생성되는 패턴으로 메모리 낭비를 방지할 수 있고, 데이터 공유가 쉽지만 동시성 문제가 발생할 수 있습니다.
    • Callable과 Runnable의 차이 : 둘다 Thread를 구현하기 위한 인터페이스로서 Runnable은 리턴값이 없고 Exception을 발생시키지 않지만 Callable은 리턴값이 존재하고 Exception을 발생시킴니다.
  • Java SE와 Java EE 애플리케이션 차이

    • SE는 Standard Edition이고 EE는 Enterprise Edition으로서 EE가 SE위에서 동작하며 JPA나 Servlet같은 API들이 추가된 것입니다. Spring은 이러한 Java EE의 기능들을 선택하여 수용하고 있습니다.
  • Access Modifier

    • public은 어떤 class에서도 접근 가능하고 protected는 같은 package 내의 class들과 protected class를 상속받은 class에서만 접근 가능하며 private은 다른 class에서 접근이 불가합니다. default로는 같은 package내의 class들에서만 접근이 가능합니다.
    • Non-Static vs Static : static은 전역변수로 사용할 수 있고 non-static은 사용할 수 없습니다.
  • 정적 바인딩 vs 동적 바인딩

    • 바인딩은 변수나 메서드 등을 위치한 메모리로 연결해주는 것인데 정적 바인딩은 컴파일 시에 일어나고 동적 바인딩은 실행시간에 일어나서 프로그램이 실행될때 변합니다. private, final, static 키워드가 붙으면 정적으로 바인딩됩니다.
  • java의 메인 메서드가 왜 public static void main(String[] args)일까?

    • public : 프로그램이 실행될 때, JVM에 의해 호출되어야 하므로
    • static : 객체가 생성되기 전에 JVM에 의해 호출되어야 하므로
    • void : 아무 값도 retrun하지 않기 때문에
    • String[] args : java commend에 매개변수를 문자열 배열로 만들어 넘겨주므로
  • 클래스, 객체, 인스턴스

    • Class가 붕어빵틀이면 객체는 붕어빵입니다.
    • 객체를 클래스의 인스턴스라고 부르기도 합니다.
    • 객체는 현실세계에 가깝고 인스턴스는 sw세계에 가깝습니다.
    • 인터페이스와 추상 클래스의 차이 : Abstract Class는 다중 상속이 불가능하고 Interface는 다중 구현이 가능합니다. 또한 Interface에서 선언된 메소드는 implements한 class에서 모두 override해야하지만 abstract class는 모두 구현할 필요는 없습니다.
    • Constructor : 인스턴스를 생성하기 위한 메소드입니다. 클래스와 이름이 같으며 명시적으로 생성해주지 않아도 파라미터가 없는 생성자가 default로 존재하며 파라미터를 추가함으로써 오버로딩이 가능합니다.
    • Overriding vs Overloading : overriding은 상속받는 메소드를 재정의하는 것이고 overloading은 파라미터가 다른 메소드들마다 다르게 호출받게 하는 기술입니다.
  • 에러 vs 예외

    • 둘다 throawable 클래스를 상속받으며 에러는 stack overflow같이 복구할 수 없는 심각한 문제이고 예외는 예외처리를 통해 방지할 수 있습니다.
    • try,catch,finally vs throws : throws는 예외가 발생한 메소드를 호출한 상위 메소드에 예외를 던지는 것입니다. try는 예외가 발생할 수 있는 코드를 넣고 catch는 예외 발생시 예외처리를 할 코드를 넣습니다. finally는 try와 catch가 종료된 이후에 실행됩니다.
    • final/finally/finalize : final 필드는 최종적이라는 의미로 오버라이딩 되지 못하거나 상속받을 수 없게 됩니다. finally는 try문이 종료된 이후에 실행되는 코드가 들어가는 부분입니다. finalize는 GC가 실행될 때 호출되는 함수입니다. OOME가 발생할 수 있어서 Java 9 부터는 사용할 수 없습니다.
  • Framework vs Library

    • Framework는 스스로 전체적인 흐름을 제어하며 사용자가 거기에 코드를 끼워맞추는 것이고 library는 사용자가 흐름을 제어하며 필요할때 가져다 쓰는 것입니다.
  • 익명함수

    • 리터럴 방식으로 만든 재사용하지 않을 이름없는 함수
  • Record

    • class 선언시에 변수만 선언해두면 필드를 private final로 선언해주고 constructor와 getter, equals, hashCode, toString등을 자동으로 생성해준다. Java 14부터 도입되었다.
profile
천체관측이 취미

0개의 댓글