Study/면접 준비

내가보려고 정리하는 신입 개발자 면접 준비 - JAVA

긷뚜 2021. 5. 6. 19:12
728x90

갱신중!


JAVA의 장단점

장점

  • 운영체제에 독립적이다
    • JVM에서 동작하기 때문에 특정 운영체제에 종속되지 않는다.
  • 객체지향 언어이다
    • OOP를 위한 여러 언어적 지원을 하고있다. (캡슐화, 상속,추상화, 다형성 등등)
  • 자동으로 메모리 관리를 해준다.(Gargage Collector)
    • JVM에서 Garbage Collector라고 불리는 데몬 쓰레드에 의해 GC(Garbage Cllection)가 일어난다
    • GC로 인해 별도의 메모리 관리가 필요 없으며 비지니스 로직에 집중할 수 있다.
  • 오픈소스이다

    • 정확히는 OpenJDK가 오픈소스이다. OracleJDK는 사용 목적에 따라서 유료가 될 수 있다.

      참고 : 구글과 Oracle의 자바전쟁

    • 많은 JAVA 개발자가 존재하며 생태계가 잘 구축되어있다.

    • 오픈소스 라이브러리가 풍부하며 잘 활용한다면 짧은 개발 시간 내에 안정적인 앱구현이 가능하다

  • 멀티쓰레드를 쉽게 구현할 수 있다.

    • 자바는 쓰레드 생성 및 제어와 관련된 라이브러리 API를 제공하고 있기 때문에 실행되는 운영체제에 상관없이 멀티 쓰레드를 쉽게 구현할 수 있다
  • 동적 로딩(Dynamic Loading)을 지원한다

    • 앱이 실행될 때 모든 객체가 생성되지 않고, 각 객체가 필요한 시점에 클래스를 동적 로딩해서 생성한다.
    • 유지보수 시 해당 클래스만 수정하면 되기 때문에 전체 앱을 다시 컴파일 할 필요가 없다
    • 따라서 유지보수가 쉽고 빠르다.

단점

  • 비교적 속도가 느리다

    • 자바는 한 번의 컴파일링으로 실행 가능한 기계어가 만들어지지 않고 JVM에 의해 기계어로 번역되고 실행하는 과정을 거치기 때문에 C나 C++의 컴파일 단계에서 만들어지는 완전한 기계어보다는 속도가 느리다. 그러나 하드웨어의 성능 향상과 바이트 코드를 기계어로 변환해주는 JIT컴파일러 같은 기술 적용으로 JVM의 기능이 향상되어 속도의 격차가 많이 줄어들었다.
  • 예외처리가 불편하다.

    • 프로그래머 검사가 필요한 예외가 등장한다면 무조건 프로그래머가 선언을 해줘야 한다.

JAVA의 접근 제어자의 종류와 특징

접근제어자 표시 설명
public + 어떤 클래스의 객체에서든 접근 가능
private - 이 클래스에서 생성된 객체들만 접근 가능
protected # 이 클래스와 동일 패키지에 있거나 상속 관계에 있는 하위 클래스의 객체들만 접근 가능
package ~ 동일 패키지에 있는 클래스의 객체들만 접근 가능

OOP의 4가지 특징

  1. 추상화

    • 구체적인 사물들의 공통적인 특징을 파악해서 이를 하나의 개념(집합)으로 다루는 것
  1. 캡슐화

    • 정보 은닉(information hiding): 필요가 없는 정보는 외부에서 접근하지 못하도록 제한하는 것
    • 변수와 메소드를 하나로 묶어냄
    • 데이터를 외부에서 직접 접근하지 않고 합수를 통해서만 접근한다
    • public, private, protected ...
  1. 상속

    • 자식 클래스가 부모 클래스의 특성과 기능을 물려받는 것
    • 기능의 일부분을 변경하는 경우 자식 클래스에서 상속받아 수정 및 사용함
    • 상속은 캡슐화를 유지, 클래스의 재사용을 용이하도록 해 준다
  1. 다형성

    • 서로 다른 클래스의 객체가 같은 메시지를 받았을 때 각자의 방식으로 동작하는 능력

      • 오버로딩(Oberloading) : 하나의 클래스에서 메소드의 이름은 같지만, 파라메터가 다른것
      • 오버라이딩(Overriding) : 부모 클래스의 메소드를 자식 클래스의 용도에 맞게 재정의 하여 코드의 재 사용성을 높이는것

OOP의 5대 원칙(S.O.L.I.D)

  • S : 단일 책임 원칙(SRP, Single Responsibility Principle)

    • 객체는 단 하나의 책임만 가져야 한다
  • O : 개방-폐쇄 원칙(OCP, Open Closed Principle)

    • 확장에는 열려(Open) 있으나. 변경에는 닫혀(Closed)있어야 한다.
  • L : 리스코프 치환 원칙(LSP, LiskovSubstitution Principle)

    • 프로그램의 객체는 프로그램의 정확성을 꺠뜨리지 않으면서 하위 타입의 인스턴스로 바꿀 수 있어야 한다.
  • I : 인터페이스 분리 원칙(ISP, Interface Segregation Principle)

    • 특정 클라이언트를 위한 인터페이스 여러 개가 범용 인터페이스 하나보다 낫다.
  • D : 의존 연전 원칙(DIP, Dependency Inversion Principle

    • 의존 관계를 맺을 때 변화하기 쉬운 것 또는 자주 변화하는 것 보다는 변화하기 어려운 것, 거의 변화가 없는 것에 의존하라.
    • 추상화에 의존하라.

reference

https://gmlwjd9405.github.io/2017/10/01/basic-concepts-of-development-java.html
https://velog.io/@ygh7687/OOP%EC%9D%98-5%EC%9B%90%EC%B9%99%EA%B3%BC-4%EA%B0%80%EC%A7%80-%ED%8A%B9%EC%84%B1
728x90