YJ의 새벽

기술면접 정리 - JAVA 본문

기술면접대비

기술면접 정리 - JAVA

YJDawn 2023. 7. 13. 21:04

  • Java 의 특징 설명해라.

-- Java 는 객체지향 프로그래밍 언어이다.

-- 기본 자료형을 제외한 모든 요소들이 객체로 표현되고, 

    객체지향 특징인 캡슐화, 상속, 다형성 이 잘 적용되어있다. 

 

장점  :  JVM ( 자바가상머신 ) 위에서 동작하기때문에 운영체제에 독립적이다.

         :  GarbageCollector를 통한 자동적인 메모리 관리가 가능하다.

단점  :  JVM 위에서 동작하기 때문에 실행속도가 상대적으로 느리다.

         : 다중 상속이나 타입에 엄격하며, 제약이 많다.

 

 


  • JVM 의 역할 설명해라.

-- JVM 은 스택 기반으로 동작하며, Java Byte Code를 OS에 맞게 해석 해주는 역할을 하고

    가비지컬렉터를 통해 자동적인 메모리를 관리.

 

 


  • Java에서 제공하는 원시타입들 설명해라.

-- 정수형 byte, short , int , long    실수형 float , double   문자형 char  논리형 boolean 

               1   ,     2   ,   4   ,  8                    4     ,    8                2 ,                1      바이트를 차지.

 

 


  • 오버라이딩 (Overriding) ,  오버로딩 (Overloading) 설명해라.

-- 오버라이딩  :  상위 클래스에 있는 메소드를 하위 클래스에서 재정의 하는것 !! 

-- 오버로딩  :  매개변수의 개수나 타입을 다르게 하여 같은 이름의 메소드를 여러개 정의하는 것 !!

 

 


  • 객체지향 프로그래밍(OOP) 설명해라.

-- 우리가 실생활에서 쓰는 모든 것을 객체라 하며, 객체지향 프로그래밍은 프로그램 구현에 필요한 객체를 파악하고,

    상태와 행위를 가진 객체를 만들고, 각각의 객체들의 역할이 무엇인지를 정의하여 객체들 간의 상호작용을 통해

    프로그램을 만드는 것.

-- 즉, 기능이 아닌 "객체가 중심" 이며, "누가 어떤일을 할 것인가?" 가 핵심.

   캡슐화 , 상속, 다형성, 추상화  ,   확장 및 유지보수가 용이

 

 


  • try - with - resources 설명해라.

-- try catch finally 문제점을 보완하기 위해 나온 개념.

-- 따로 finally 구문이나, 모든 catch 구문에 종료 처리를 하지 않아도 되는 장점이 있음.

 

 


  • 추상클래스와 인터페이스 설명해라.

-- 추상클래스  :  클래스 내 추상메소드가 하나 이상 포함되거나 , abstract 으로 정의된 경우.

-- 인터페이스  :  모든 메소드가 추상 메소드로만 이루어져있는것.

 

공통점  :  new 연산자로 인스턴스 생성 불가능.

            :  사용하기 위해서는 하위클래스에서 구현해야함.

차이점  :  인터페이스는 그 인터페이스를 구현하는 모든 클래스에 대해 특정한 메소드가 반드시

                존재하도록 강제함.

             : 추상클래스는 상속받는 클래스들의 공통적인 로직을 추상화 시키고 , 기능 확장을 위해 사용.

             : 추상 클래스는 다중상속은 불가능하지만, 인터페이스는 다중상속 가능하다 !!!

 

 


  • 싱글톤 패턴 설명해라.

-- 싱글톤패턴은 단 하나의 인스턴스를 생성해 사용하는 디자인패턴.

-- 인스턴스가 1개만 존재해야 한다는것을 보장하고싶은 경우와

   동일한 인스턴스를 자주 생성해야하는 경우 주로 사용 ( 메모리 낭비 방지 )

-- ex ) Spring Bean 

 

 


  • 객체지향 설계원칙 ( SOLID )설명해라.

-- SRP  - 단일 책임 원칙  :  한 클래스는 하나의 책임만 가져야한다.

-- OCP  - 개방,폐쇄 원칙  :  확장에는 열려있고, 수정에는 닫혀있어야한다.

-- LSP  -  리스코프 치환 원칙  :  하위타입은 항상 상위타입을 대체 할수 있어야한다.

-- ISP  -  인터페이스 분리원칙  :  인터페이스 내에 메소드는 최소한 일수록 좋다.

                                                  ( 하나의 일반적인 인터페이스보다 여러개의 구체적인 인터페이스가 낫다 )

                                                  SRP 와 같은 문제에 대한 두 가지 다른 해결책.

-- DIP  -  의존관계 역전 원칙  :  구체적인 클래스보다 상위클래스, 인터페이스, 추상클래스와 같이

                                                 변하지 않을 가능성이 높은 클래스와 관계를 맺어라. 

                                                   ( 의존성 주입 DI )

                        


  • 자바의 메모리 영역에 대해 설명해라.

-- Method 영역, Stack 영역, Heap 영역  으로 구분, 데이터 타입에 따라 할당된다.

-- Method 영역 : 전역변수와 static 변수를 저장, Method영역은 프로그램 시작부터 종료까지 메모리에 남아있다.

                ( JVM 이 동작해서 클래스가 로딩될때 생성 )

-- Stack 영역 : 지역변수와 매개변수 데이터 값이 저장되는 공간이며, 메소드가 호출될때 메모리에 할당되고,

                         종료되면 메모리가 해제된다. LIFO ( Last In First Out ) 구조를 갖고, 

                         변수에 새로운 데이터가 할당되면 이전 데이터는 지워진다.

                ( 컴파일 타임 시 할당 )

-- Heap 영역 : new 키워드로 생성되는 객체 (인스턴스), 배열 등이 Heap 영역에 저장되며 , 

                       가비지 컬렉터에 의해 메모리가 관리된다.

 

 


  • 클래스 와 객체 에 대해설명해라.

-- 클래스는 객체를 만들어내기 위한 설계도 혹은 틀 이라고 할수있고, 객체를 생성하는데 사용한다.

-- 객체는 설계도 ( 클래스 ) 를 기반으로 생성되며 , 자신의 고유 이름과 상태,행동을 갖는다.

-- 상태는 (필드)  ,  행동은 ( 메소드 )

-- 객체에 메모리가 할당되어 실제로 활용되는 실체는 '인스턴스' 라고 부른다.

 


  • 생성자 (Constructor) 에 대해설명해라.

-- 생성자는 클래스와 같은 이름의 메소드로, 객체가 생성될 때 호출되는 메소드이다.

-- 명시적으로 생성자를 만들지 않아도 default로 만들어지며, 

   생성자는 파라미터를 다르게하여 오버로딩 할 수 있다.

 

 


  • Synchronized 에 대해설명해라.

-- 여러개의 쓰레드가 한 개의 자원을 사용하고자 할때, 현재 사용하고있는 쓰레드를 제외하고

   나머지 쓰레드들은 데이터에 접근할 수 없게 막는 개념.

-- 데이터의 thread-safe 를 하기위해 자바에서 Synchronized 키워드를 제공해 멀티쓰레드 환경에서 

    쓰레드간 동기화를 시켜 데이터의 thread-safe 를 보장.

-- Synchronized는 변수와 메소드에 사용해서 동기화 할 수 있으며, 

   Synchronized 키워드를 남발하게되면 프로그램의 성능저하를 야기시킴.

 

 


  • String, StringBuffer, StringBuilder 에 대해설명해라.

-- String 은 불변의 속성을 가지며, StringBuffer 와 StringBuilder 는 가변의 속성을 갖는다.

-- StringBuffer 는 동기화를 지원하며 멀티 쓰레드 환경에서 주로 사용한다.

-- StringBuilder 는 동기화를 지원하지 않아 실글 쓰레드 환경에서 주로 사용한다.

 


  • 접근제한자 (Access Modifier) 에 대해설명해라.

-- 변수 또는 메소드의 접근번위를 설정해주기위해 사용하는 Java 의 예약어.

-- public   :  접근제한이 없다  ( 같은프로젝트 내 어디서든 사용가능 )

-- protected  :  해당 패키지 내, 다른 패키지에서 상속받아 자손 클래스에서 접근가능.

-- default  :  해당 패키지 내에서만 접근가능.

-- private  :  해당 클래스 내에서만 접근가능.

 

 


  • 클래스 멤버변수 초고화 순서 에 대해설명해라.

-- static 변수 선언부  :  클래스가 로드될때 변수가 제일 먼저 초기화된다.

-- 필드 변수 선언부  :  객체가 생성될 때 생성자 block 보다 앞서 초기화된다.

-- 생성자 block  :  객체가 생성될 때 JVM이 내부적으로 locking ( thread-safe 영역 )

 

 


  • static 에 대해설명해라.

-- static 키워드를 사용한 변수나 메소드는 크래스가 메모리에 올라갈 때 자동으로 생성되며, 

    클래스 로딩이 끝나면 바로 사용가능하다. 즉 , 객체생성 없이 사용 가능.

-- 모든 객체가 메모리를 공유한다. GC (가비지컬렉터 ) 관리 영역 밖에 있기때문에 프로그램이 종료될때까지

   메모리에 값이 유지된 채로 존재한다.

 

  • static 사용하는 이유 에 대해설명해라.

-- 변하지 않는 값이나 공통으로 사용되는 값 같은 공용자원에 대한 접근에있어서 

   매번 로딩하거나 값을 읽어들이는 것보다 일종의 전역변수 와 같은 개념을 통해 접근하는 것이

   비용도 줄이고 효율을 높일수 있다.

-- 인스턴스 생성없이 바로 사용가능하기때문에 프로그램 내에서 공통으로 사용되는 데이터들을 관리할때 이용.

 

 


  • InnerClass (내부클래스) 에 대해설명해라.

-- 내부 클래스에서 외부 클래스의 멤버에 손쉽게 접근할수 있다.

-- 서로 관련있는 클래스들을 논리적으로 묶어서 표현함으로써, 

    캡슐화를 증가시키고, 코드의 복잡성을 낮출수 있다.

-- 외부에서 내부클래스에 접근할 수 없으므로, 코드의 보안성을 높인다.

 


  • Error와 Exception 에 대해설명해라.

-- Error 는 실행중 일어날수있는 치명적 오류, 컴파일 시점에 체크할수 없고 오류가 발생하면 비정상 종료.

-- Exception은 Error보다 경미한 오류, 프로그램의 비정상 종료를 막을 수 있다. 

 


  • 컬렉션 프레임워크 에 대해설명해라.

-- 다수의 데이터를 쉽고 효과적으로 관리할수 있는 표준화된 방법을 제공하는 클래스의 집합을 의미.

-- 자바 컬렉션에서는 List, Set, Map 인터페이스를 기준으로 여러 구현체가 존재하고, Stack , Queue 도 존재.

  • List 에 대해설명해라.

-- 순서가 있는 데이터의 집합, 데이터의 중복을 허용한다.   ( ArrayList )

  • Set 에 대해설명해라.

-- 순서가 없는 데이터의 집합, 데이터의 중복을 허용하지 않는다.  ( HashSet )

   순서를 보장하기 위해 ( LinkedHashSet ) 을 사용 . 

  • Map에 대해설명해라.

-- 키와 값이 한 쌍으로 이뤄져있고, 키를 기준으로 중복을 허용하지 않으며, 순서가 없다.

   순서를 보장하기 위해 ( LinkedHashMap ) 을 사용. 

  • Stack 에 대해설명해라.

-- Stack 객체는 직접 new 키워드로 사용할 수 있으며,

   Queue 인터페이스는 LinkedList에 new 키워드를 적용해 사용할수있다.

 


  • 제네릭 <T> 에 대해설명해라.

-- 데이터의 타입을 하나로 지정하지 않고, 사용할 때마다 범용적으로 포괄적으로 지정한다는 의미.

-- 제네릭타입을 사용함으로써 잘못된 타입이 사용될 수 있는 문제를 컴파일 과정에서 제거할수있어

   에러를 사전에 방지할수있다.

 

 

 

'기술면접대비' 카테고리의 다른 글

기술면접 정리 - 백엔드  (0) 2023.07.12
Comments