1. 컴포넌트와 모듈의 차이

    모듈과 컴포넌트는 비슷하지만 모듈이 컴포넌트보다 큰 단위라고 생각

    컴포넌트는 하나의 부품이다. 보통 작은 영역에서 서로 관련되어 있고 다용도로 사용이 가능하게 만든다. UI를 제어하는 타이머같은 Back단에서 스레드를 보조하는 컴포넌트를 예로 들 수 있다.

    모듈은 조금 작은 범위의 조각. 외부 인터페이스가 없는 복학적인 수요기능에서 실행될 수 있는 단위. 데이터베이스나 이메일같은 통합적인 기능을 제공하면서 라이브러리처럼 사용될 수 있는 것들이다. 그리고 호환성이 더 좋다.

  2. 자바란 무엇인가

    자바는 객체지향프로그래밍 언어로서 보안성이 뛰어나며 JVM으로 인해 OS의 제약이 없다는 것이 특징

    C++ 언어의 객체지향적인 장점을 살리면서 분산환경을 지원해 효율적

  3. 자바 구동원리

    자바로 작성한코드[.java]를 자바 컴파일러가 바이트코드화[.class]하고 바이트코드화된 코드를 JVM이 인터프리터 방식으로 애플리케이션 실행

  4. JVM의 특징

    자바 가상머신이라 불리며 자바소스로부터 만들어진 바이너리파일 즉 [.class] 파일을 실행하기 위해 필요하다. java가 OS에 구애받지 않고 재사용가능하게 해준다. 그리고 자동메모리관리기법인 GC를 수행한다.

    JRE : 자바 실행 환경. JVM으로 자바프로그램을 동작시킬 때 필요한 파일들을 가지고 있다.

    JDK : Java 개발을 하기위해 필요한 환경. JDK에는 JRE가 포함되어 있음

  5. 객체 지향과 절차 지향의 차이점

    절차지향 프로그래밍은 물이 위에서 아래로 흐르는 것과 같이 순차적인 처리가 중요시되며 프로그램 전체가 유기적으로 연결되도록 하는 프로그래밍 기법이다. 컴퓨터의 처리구조와 유사해 실행속도가 빠르다는 장점이 있다. 반면 유지보수가 어렵고 실행순서가 정해져있어 코드의 순서가 바뀌면 결과값이 달라질 수 있고 디버깅이 어렵다는 단점이 있다.

    객체지향은 실제세계를 모델링하여 소프트웨어를 개발하는 방법. 마치 컴퓨터 부품을 하나씩 사다가 컴퓨터를 조립하는 것과 같은 방법. 코드의 재활용성이 높고 디버깅이 쉬운 장점이 있으나 처리속도가 절차지향보다 느리고 설계에 많은 시간이 소요되는 단점이 있다.

  6. 객체지향 언어의 특징

    캡슐화 : 관련된 데이터와 알고리즘이 하나의 묶음으로 정리된 것으로써 데이터를 감추고 외부세계와는 메소드를 통해 상호작용

    상속 : 이미 작성된 클래스를 이어받아 새로운 클래스를 생성하는 기법으로 기존 코드를 재활용해서 사용

    다형성 : 하나의 이름으로 많은 방법을 대처하는 기법

  7. 오버라이딩과 오버로딩 차이점과 특징

    오버로딩은 ‘많은 것을 싣다’ 오버라이딩은 ‘재정의한다’는 사전적 의미를 가진 만큼 차이점도 이와 비슷하다

    오버로딩은 하나의 클래스안에서 인스턴스나 개수의 형식이 다른 동일한 이름의 메소드를 여러 개 정의하는 것이고 정적 바인딩이다.

    오버라이딩은 부모클래스에서 상속을 했을 경우에 적용할 수 있고, 기존의 내용의 틀만 가져와서 재정의하는 것이고 동적 바인딩이다.

  8. 기본형 변수와 참조형 변수는 무엇이 있나?

    자바가 제공하는 기본형 변수는 총 8가지로 char, byte, short, boolean, int, long, float, double이 있다.

    참조형은 값이 저장된 곳의 메모리 주소를 저장하는 공간으로 객체의 주소를 저장한다. 자바에서 기본형 변수 8가지를 제외하고는 모두 참조형이다.

  9. 스택 오버플로우가 왜 발생하는가?

    스택포인터가 스택의 경계를 넘어설 때 발생한다. 호출 스택은 제한된 양의 주소공간을 이루며 프로그램 시작 시 결정된다.

  10. 메모리 누수가 무엇인가?

    프로그래밍에서 메모리 누수현상은 프로그램이 필요하지 않은 메모리를 계속 점유하고 있는 현상이다.

    자바에서 메모리 누수는 더 이상 사용하지 않는 객체가 GC에 의해 회수되지 않고 누적되는 현상. old영역에 누적된 객체로 인해 메이저GC가 빈번히 발생하게 되고 프로그램의 응답속도가 늦어지다 결국 Out of Memory 오류로 프로그램이 종료

  11. 메모리 누수를 막기위한 방법

    가장 좋은 방법은 참조값을 갖는 변수가 최소한의 유효범위안에 있도록 하는 것이다. Local변수로 만들 경우 자동으로 GC의 대상이 되는 것을 예로 들 수 있다.

  12. Static이란?

    Static 키워드를 사용한다는 것은 어떠한 값이 메모리에 한번 할당되어 프로그램이 끝날때 까지 그 메모리에 값이 유지된다는 것을 의미. 쉽게 말해 특정한 값을 공유해야하는 상황이라면 Static 사용 시 메모리의 이점을 얻을 수 있다. 또한, Static은 전역, 정적 변수와 함께 데이터영역에 저장된다.

  13. 싱글톤 패턴과 디자인패턴이란?

    어플리케이션이 시작될 때 어떤 클래스가 최초 한 번만 메모리를 할당하고(static) 그 메모리에 인스턴스를 만들어 사용하는 디자인패턴

    사용 이유 →

    1. 고정된 메모리 영역을 얻으면서 한 번의 new로 인스턴스를 사용하기에 메모리 낭비 방지
    2. 인스턴스가 한 개만 존재하는걸 보증하고 싶을때
    3. 두 번째 이용부터 객체로딩시간이 줄어 성능 향상

    문제점 : 싱글톤 인스턴스가 너무 많은 일을 하면 결합도가 높아져 ‘개방-폐쇄’ 원칙 위반(=객체지향 설계 원칙에 어긋남)

    디자인 패턴이란 소프트웨어를 설계할 때 특정 맥락에서 자주 발생하는 고질적인 문제들이 또 발생했을때 재사용할 수 있는 훌륭한 해결책

  14. 익명클래스와 익명객체란?

    익명클래스란 클래스의 이름이 없는 것을 의미. 인터페이스를 구현하기 위해 해당 인터페이스를 구현할 클래스를 생성해야하는데 일회성이고 재사용할 필요가 없다면 굳이 클래스를 만들 필요없이 익명클래스를 사용한다.

  15. JAVA 문자열 검색

    indexOf(””), contains(””), matches(정규식포함문자열)

  16. 스레드는 무엇이고 언제 쓰이는가?

    하나의 프로세스 내부에서 독립적으로 실행되는 하나의 작업흐름 혹은 단위를 말하며 세부적으로는 OS에 의해 관리되는 하나의 작업(task)를 의미

    JVM에 의해 하나의 프로세스가 발생되고 main()안의 실행문들이 하나의 스레드이다.

    main() 이외의 스레드를 만드려면 Thread 클래스를 상속하거나 Runnable 인터페이스를 구현한다.

  17. 멀티스레드와 스레드의 차이점

    여러 스레드를 동시에 실행시키는 응용프로그램을 작성하는 기법을 말한다. 메모리 공유로 시스템 자원 소모가 줄어들고 동시에 두 가지 이상 작업이 가능하지만 서로 자원을 소모하다 충돌할 가능성이 있고 코딩이 복잡해져 버그가 생길 가능성이 있다.

  18. 제네릭이란?

    제네릭은 클래스 외부에서 클래스의 타입을 지정하는 것.

    클래스 내부에서 사용할 데이터타입을 나중에 인스턴스 생성할 때 확정하는 것을 제너릭이라고 한다.

  19. 람다식이란?

    식별자없이 실행이 가능한 함수. 함수인데 함수를 따로 만들지 않고 코드 한 줄에 함수를 써서 그것을 호출하는 방식. 자바 8 부터 지원하고 코드가 간결해 가독성이 좋다는 것이 장점. 그러나 람다식으로 만든 함수는 재사용이 불가하고 디버깅이 까다롭다

  20. 힙과 스택의 차이점

    스택은 정적메모리를 사용하여 컴파일시 크기가 정해져있으나 힙은 동적메모리를 사용하여 런타임시에 메모리영역을 원하는 크기로 잡을 수 있다는 것이 큰 차이점