면접 질문

웹 프로그래머 면접 예상 질문

zumsim 2018. 7. 17. 22:18
728x90
반응형

1. Java

  - 객체지향 프로그래밍 언어로써 객체지향의 특징인 캡슐화, 상속, 다형성들이 적용


2.. OOP(Object-Oriented Programming, 객체 지향 프로그래밍)

  - 단순히 명령어와 함수라는 개념에서 벗어나 여러 개의 독립 단위를 생성하고 그것들의 모임으로 프로그래밍하는 기법

  - 캡슐화, 다형성, 상속을 이용하여 코드 재사용성을 증가시키고 유지보수가 좋은 장점을 얻기 위해 객체들을 연결시켜서 

    프로그래밍하는 기법

  - 특징

   1) 캡슐화

     - 관련있는 데이터와 함수를 하나의 단위로 묶는 것

     - 데이터를 보호하기 위해 다른 객체의 접근을 제한하는 접근제한자의 기능을 제공한다 외부에 공개해서 안되는것은 

      private로 선언

   2) 정보 은폐

     - 외부에서 객체 상태를 바꾸거나 허가되지 않은 동작으로부터 보호

   3) 추상화(Abstraction)

     -외부에서 사용해야 하는 기능은 공개, 제한해야 하는 기능은 은폐

   4) 다형성(Polymorphism) 

     - 하나의 참조변수에 여러 타입의 객체를 참조 할 수 있다.

   5) 인스턴스 

     - 추상화 또는 클래스 객체가 실제로 구현되서 메모리에 올라가 있는 상태

   6) 상속 

     - 기존의 클래스를 바탕으로 새로운 클래스를 만들 수 있음



3. 접근제한자

   - public : 모든 곳에서 접근 가능

   - protected : 같은 패키지 안에 있는 모든 클래스가 접근 가능(다른 패키지에서 상속받아 접근 가능)

   - default : 같은 패키지 내에서 접근 가능

   - private : 같은 클래스 내에서만 접근 가능



4. 인터페이스와 추상클래스

   1)  추상클래스

      - abstract 메소드가 하나라도 존재하는 클래스

      - 일부는 구현된 메소드도 있고, abstract라고 붙어있는 메소드는 구현이 되어있지 않다.

    - 추상클래스를 상속받는 클래스는 abstract가 붙어있는 메소드를 반드시 구현해야 한다.

    - 필수적으로 구현해야할 메소드가 있을 때 추상클래스를 쓰게 된다.

      - 사용 이유 : 추상 클래스는 다른 사람이 접근해서 변경하거나 그냥 사용하지 못하기 때문..? (확신이 좀 없다...)

   2) 인터페이스

      구현체 없이 메소드만 명시되어있다.

      인터페이스를 구현받는 클래스는 인터페이스에 있는 메소드를 반드시 모두 구현해야 한다.

      인터페이스를 사용하면 implements를 구현하는 부분에서 extends 또한 사용할 수 있다.(다중상속)

      - 공통점 : 선언만 있고 구현 내용이 없는 클래스, 자기 자신이 객체를 생성할 수 없으며, extendsimplements를 한 

                  클래스만 이 객체를 생성할 수 있다. 상속 받으면 구현을 반드시 해야한다.

       - 사용 이유 : 개발 시간 단축, 표준화 가능(기본 틀을 인터페이스로 만들고 구현하여 사용)



5. 상속이란

   - 부모 클래스로부터 멤버변수, 함수를 물려받는 것

   - 여러 클래스에 중복된 메소드의 수정시 상위 클래스만 수정하면 됨(유지보수 용이)

   - 다중상속 지원X, 중복을 줄인다, Object클래스를 자동으로 상속받는다.

   - 클래스 사이의 멤버 중복 선언을 안해도 된다

   - 상속 접근 지정자 : 상속을 해줄 상위 클래스의 상속 허용여부

     -> public : 어떤 클래스든 접근 가능

     -> protected : 같은 패키지만 접근 가능

-> private : 같은 클래스여도 접근 불가



6. 스트링과 스트링버퍼의 차이

   - String은 변경 할 수 없지만 StringBuffer는 변경 할 수 있다.

   - String은 문자열을 연결 할 때 매시간 새로운 경우를 만드므로 느리고, 메모리 소비가 크지만, StringBuffer는 스트링에 비해 빠르고 더 적은 메모리를 소모한다.

   - String은 객체의 equals() 메소드를 치환해 2개의 내용을 비교할 수 있지만, StringBufferequals 메소드를 치환하지 않는다.




7. 변수와 상수

  - 변수 : 변하는 자료의 내용을 그때그때 저장하는 수

  - 상수 : 값이 늘 고정되어 변함없는 수(final 키워드)



8. 자바의 메모리 영역

  1. 메소드 영역 : static 변수, 전역변수, 코드에서 사용되는 Class 등이 올라가는 영역

  2. 스택 영역 : 지역변수, 메소드 등이 할당되는 LIFO(Last In First Out)방식의 메모리

  3. (Heap) : new 연산자를 통해 할당된 객체들이 저장되며, 가비지 컬렉션에 의해 메모리가 관리된다.


  가비지 컬렉션

     - 시스템에서 더 이상 사용하지 않는 동적 할당된 메모리 블록을 찾아 자동으로 다시 사용 가능한 자원으로 회수하는 것




9. 프로세스와 쓰레드의 차이점

  - 프로세스 : OS가 메모리 등의 자원을 할당해준 실행중인 프로그램을 가리킨다. 각 프로세스는 메모리공간을 독자적으로 갖기 때문에 공간을 공유하지 못한다.

  - 쓰레드 : 프로세스 내에서 프로세스의 자원을 가지고 실제로 일하며 각 쓰레드는 독자적인 Stack 메모리를 갖고 그 외의                   자원(메모리)는 프로세스 내에서 공유하게 된다.




10. 자바의 제네릭

  - 클래스 내부에서 사용할 데이터 타입을 객체 생성시에 결정짓는 방식

  - 사용이유

 1) 강제형변환을 제거 

 2) 코드절약 및 재사용성 증가 

 이건 사실 적어놓긴 했는데 아직 헷갈린다.. 이거 보는 사람이 있다면 다시 한 번 정의해주시길...



11. JVM(Java Virtual Machine)

  - Java OS사이에서 중개자 역할을 수행하여 Java가 OS에 구애받지 않고 재사용을 가능하게 하며 가장 중요한 메모리 관리, Garbage Collection을 수행한다.

  - Java 컴파일러가 소스코드(.java)를 읽어들여 자바 바이트코드(.class)로 변환시켜 Class Loader를 통해 class파일을 JVM으로 로딩되고 로딩된 파일들은 실행엔진을 통해 해석된다.




12. 배열과 리스트의 차이

  - 리스트는 순서가 있는 데이터의 집합으로 데이터의 중복을 허용하며 동적으로 크기를 조절할 수 있다.

  - 배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것으로 고정된 길이를 가지고 길이를 늘리려면 새로운 배열을 만들고 복사해야 한다. 인덱스를 사용하여 자료에 접근할 수 있다.

  - 데이터를 중간에 추가할 때 배열은 덮어씌우는 방식이지만 리스트는 넣은 자리부터 하나씩 뒤로 밀어낸 뒤 그자리에 삽입을 한다.

  - 데이터를 삭제할 때 배열은 데이터만 삭제하고 자리는 남겨두는 반면에 리스트는 삭제 후 하나씩 앞으로 당겨서 채운다.

  - 데이터 추가,삭제시 리스트는 메모리를 재할당해서 배열보다 속도가 느리다





















728x90
반응형

'면접 질문' 카테고리의 다른 글

오랜만의 면접준비  (0) 2022.05.08