티스토리 뷰
https://luckyguystory.tistory.com/87
[JAVA]
1.Garbage Collection(가비지 컬렉션)이란 무엇인가요?
> Garbage Collection(가비지 컬렉션)메모리 관리 방법 중 하나로 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요 없게 된 영역을 해제하는 기능이다.
>이 Garbage Collection의 장점은 이미 해제된 메모리에 접근하거나 또 다시 해제하는 버그와 메모리누수(더이상 사용되지 않는 객체들이 회수되지 못하고 누적되는 것)의 버그를 줄이거나 막을 수 있다.
>단점으로는 할당된 메모리가 해제되는 시점을 알 수 없어 프로그램이 예측 불가능하게 일시적으로 정지할 수 있어 실시간 시스템에 적합하지 않을 수 있다. 또한 프로그래머가 객체가 필요 없어지는 시점을 알고 있더라도 이 알고리즘이 메모리해제시점을 추적해야 하므로 오버헤드작업이 되는 경우가 있다.
>Java에서는 JVM이 GC(Garbage Collection) 기능을 사용하여 메모리를 정리한다.
자바의 GC는 어떻게 동작하나요?
>'메모리를 할당--> 사용중인 메모리 인식 --> 사용되지 않는 메모리 인식'과정으로 이 작업을 통해 앞으로 메모리를 얼마나 사용할 수 있는지 파악하고 Stop The World를 통해 GC를 실행시킨다. (Stop The World란 GC작업을 하기 위해 JVM이 어플리케이션 실행을 멈추는 것을 말한다. )
2. 자바의 기본형 데이터 타입에 대해 설명해 보세요.
기본형 타입을 8타입으로 나눌 수 있습니다.
- 정수형 타입 :
byte(1byte), short(2byte), int(4byte), long(8byte)
정수형은 정수를 표현하는 데이터 타입인데 표현할 수 있는 정수의 범위에 따라서 다양하게 제공된다.정수형에서 가장 자주 사용하는 int는 4바이트이다.
long형은 8byte크기를 가진다. int 보다 더 큰 범위의 정수를 표현하고 싶을때 사용한다.
- 실수형 타입 : float(4byte), double(8byte)
실수형은 float과 double형이 있다.
float은 4바이트, double은 8바이트로 double은 float보다 더 큰 범위의 실수를 표현할 수 있다.
- 문자형 타입 : char(2byte)
문자형은 char로 2byte크기를 가집니다. 문자는 작은따옴표를 이용하여 한 글자를 표현할 수 있다.
- 논리 타입: boolean(1byte)
논리형은 크기가 1byte이고 true와 false 중에 한 가지 값을 가질 수 있다.
3.자바의 참조형 데이터 타입에 대해 설명해 보세요.
참조 자료형은 클래스 타입으로 변수를 선언하는 자료형입니다. 그러므로 클래스에 따라 할당되는 메모리가 다릅니다. 대표적으로 String, Date 등이 존재하고 또한 임의로 내가 원하는 클래스를 만들어 참조 자료형으로 사용할 수 있습니다.
참조형은 객체의 저장 공간을 주소를 저장합니다. 참조형 변수는 null 값을 기본으로 가지고 있고 정의된 생성자를 통해 생성 되며 힙 메모리 공간에 저장 됩니다.
4. OOP (Object-Oriented Programming)이란 ?
객체 지향적인 프로그래밍.
즉, C언어같은 절차 지향적인 프로그래밍이 아닌 객체의 관점에서 프로그래밍을 한다는 것
OOP는 객체를 기준으로 코드를 나누어 구현한다. 자바의 경우 그 구성 부분 단위가 클래스이다.
자세히 말하자면 클래스는 설계도고 직접 일 을 하는 구현체는 인스턴스이다.
OOP의 특징
캡슐화 (Encapsulation)
캡슐화란
하나의 객체에 대해 그 객체가 특정한 목적을 위한 필요한 변수나 메소드를 하나로 묶는 것을 의미한다. 따라서 클래스를 우리가 만들 떄 훗날 이 클래스에서 만들어진 객체가 특정한 목적을 잘 수행할 수 있도록 사용해야할 변수와 그 변수를 가지고 특정한 액션 즉 메서드를 관련성 있게 클래스에 구성해야한다.
정보은닉
그리고 캡슐화를 하는 중요한 목적은 바로 정보은닉이다. 유저 정보를 가지고 있는 User라는 객체에서 유저의 정보가 public으로 선언되어 있다면, 누구든 접근해서 유저 정보를 변경할 수 있다. 그렇기 때문에 private로 해서 데이터를 보호해서 접근을 제한해야한다.
이렇게 보호된 변수는 getter나 setter 등의 메서드를 통해서만 간접적으로 접근이 가능하도록 하는 것이 캡슐화의 중요한 목적이다.(setter도 아무생각 없이 만들면 안된다.)
추상화 (Abstraction)
추상화는 목적과 관련이 없는 부분을 제거하여 필요한 부분만을 표현하기 위한 개념이다.
개념설명
세상에 있는 것을 본따 클래스를 만들고 그 클래스의 상태와 행동을 부여한 객체를 만든다.
그러나 세상에 모든 것을 다 클래스에 담고 객체를 만드것은 불가능하다. 그래서 추상적으로 생각해 일단 큰틀의 클래스를 구현하고 거기에 최소 이러한 공통적인 요소나 필수 적인 요소는 들어갔으면 하는 바램에서 만든 것이 추상클래스이다.
인터페이스와 추상클래스
이 과정에서 공통적인 요소나 특징을 추출하는 과정이 추상화 인것 같다.
예를들어. 벤츠, 아우디, 티코 등등 우리가 생각하는 여러 종류의 자동차가 있다. 이것을 다 클래스화하고 변수와 메서드 등을 개별적으로 만드는 것은 무모한 짓이다. (즉,확장성 때문에 추상화할 필요가 있다.)
따라서 방금 나열한 자동차들의 공통적인 요소나 특징을 추출하는 과정인 추상화를 거쳐 요소를 끄집어 내면 바퀴, 핸들, 차문, 유리창 등 필수적인 부품이 있다.
바퀴는 굴러가고, 핸들은 돌아가고 차문은 열려야한다 공통적인 행동 즉 어떤 차든 필수적으로 필요한 메서드가 추출된다.
이러한 과정이 추상화하는 과정이다. 이렇게 추상적으로 끄집어 낸 개념들을 큰 틀에서 클래스로 만든것이 바로 추상클래스이다.
추상화는 객체들의 공통된 특징을 파악해 정의해 놓은 설계 기법이라고 할 수 있다.
다형성(Polymorphism)
다형성은 상속을 통해 기능을 확장하거나 변경하는 것을 가능하게 해준다. 즉, 다형성은 형태가 같은데 다른 기능을 하는 것을 의미한다(같은 동작이지만 다른 결과물이 나올때 다형이라고 생각하면 된다.).
이를 통해 코드의 재사용, 코드 길이 감소가 되어 유지보수가 용이하도록 도와준다.
Overriding & Overloading
OOP에서 다형성의 개념을 녹여내는 방법은 두가지인데, 바로 오버라이딩(Overriding)과 오버로딩(Overloading)이다.
오버라이딩
- 부모 클래스에서 상속받은 자식 클래스에서 부모클래스에서 만들어진 메서드를 자식 클래스에서 자신의 입맛대로 다시 재정의해서 사용하는 것을 말한다.
오버로딩
- 같은 이름의 메서드를 사용하지만 메서드마다 다른 용도로 사용되며 그 결과물도 다르게 구현할 수 있게 만드는 개념
오버로딩이 가능하려면 메서드끼리 이름은 같지만 매개변수의 갯수나 데이터 타입이 다르면 오버로딩이 적용
상속성, 재사용(Inheritance)
상속은 객체지향의 꽃이라고 할 수 있다.
상속이란 기존 상위클래스에 근거하여 새롭게 클래스와 행위를 정의할 수 있게 도와주는 개념이다.
기존 클래스에 기능을 가져와 재사용할 수 있으면서도 동시에 새롭게 만든 클래스에 새로운 기능을 추가할 수 있게 만들어 준다.
5.캡슐화 패턴을 설명하시고, 왜 해야 하는지 설명해 주세요.
캡슐화의 패턴은 생성패턴 구조패턴 행위패턴으로 나뉜다.
캡슐화는 중요한 데이터를 쉽게 바꾸지 못하도록 할 때 사용한다.
캡슐화를 하는 가장 큰 이유는 정보 은닉에 있다.
캡슐화를 통해 외부에서 내부의 정보에 접근하거나 변경할 수 없게 직접적인 접근을 막고
객체가 제공하는 필드와 메소드를 통해서만 접근이 가능하다.
이렇게 접근을 제한함으로써 유지보수나 확장 시 오류의 범위를 최소화할 수 있고
객체 내의 정보 손상과 오용을 방지하고 데이터가 변경되어도 다른 객체에 영향을 주지 않아 독립성이 좋다.
6.다형성이란 무엇이고 동적 바인딩에 대해 설명해주세요.
다형성(Polymorphism)
-하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미합니다.
상속을 통해서 형성된 부모 자식 클래스들간의 효과적인 관리를 가능하게 해 줍니다.
-자바에서는 이러한 다형성을 부모 클래스 타입의 참조 변수로
자식 클래스 타입의 인스턴스를 참조할 수 있도록 하여 구현하고 있습니다.
동적 바인딩(Dynamic Binding)
-동적 바인딩(Dynamic Binding)- 런타임에 호출될 함수가 결정되는 것으로, virtual 키워드를 통해 동적 바인딩하는 함수를 가상 함수라고 한다.
함수가 가상 함수로 선언이 되면, 포인터 변수가 실제로 가리키는 객체에 따라 호출의 대상이 결정된다.
(추가)정적 바인딩
-컴파일 타임에 호출될 함수가 결정되는 것으로, 함수는 기본적으로 정적 바인딩된다.
컴파일러는 선언되어있는 자료형을 보고 바인딩을 하기 때문에 실제로 가리키는 객체가 무엇이든 포인터의 자료형을 기반으로 호출의대상을 결정한다.
7. 상속이란 무엇인가요?
- 부모 클래스에서 정의된 필드와 메소드를 자식 클래스가 물려받는 것입니다.
8.상속에 대해 개발하면서 느낀점을 말해주세요.
(1) 상위 클래스 기능에 버그가 생기거나 기능의 추가/변경 등으로 변화가 생겼을 때 상위 클래스를 상속 받는 하위 클래스가 정상적으로 작동할 수 있을지에 대한 예측이 힘듬.
- 하위 클래스는 상위 클래스의 부분 집합이기 때문에
(2) 상속 구조가 복잡해질 수록 그 영향에 대한 예측이 힘들어짐
(3) 상위 클래스에서 의미 있었던 기능이 하위 클래스에서는 의미 없는 기능일 수 있음
(4) 하위 클래스는 반드시 상위 클래스로부터 물려 받은 기능들을 제공해야 함 + 하위 클래스에서 기능들이 추가됨
- 기능 확장에 따라 상위 클래스에서 파생된 클래스들이 많아지고, 그 규모가 커짐에 따라 일관성 있게 작성하지 않은 클래스들에 대한 이해도는 점차 복잡해지고 사용에 어려움이 생길 수 있음
9. class와 interface에 대해 설명해주세요.
클래스와 인터페이스는 객체 지향 프로그래밍에서 사용하며, 클래스와 인터페이스의 차이점은 class는 객체를 인스턴스화하는 참조 유형이고, interface는 객체를 인스턴스화하는 데 사용할 수 없는 참조 유형이라는 것입니다. Class는 많은 interface를 구현할 수 있습니다.
10. thread란 무엇이고 thread를 구현하기 위한 인터페이스, 클래스는 어떤 것이 있나요?
11. static 키워드에 대해 설명하세요.
static은 고정된 의미를 가지고 있습니다. 변수나 메소드에 주로 사용하고,
인스턴스의 생성과 상관없이 메모리에 해당 영역을 초기화 시키고 해당 영역을 공유하는 기능을 가지고 있습니다.
12. 오버로딩과 오버라이딩 차이점
오버로딩 : 같은 함수이름으로 데이터 타입과 갯수를 달리 한 것(데이터 타입과 갯수 같고 리턴 타입 다르면 오버로딩X) -> 새로운 메소드를 정의-> 함수 여러개 만들 수 있음
ex : System.out.println()
오버라이딩 : 상속 관계에서 같은 함수로 바디만 달리한 것 -> 상속받은 기존의 메소드를 재정의
부모 = 자식
오버라이딩은 자식꺼
ex:
class Cake {
public void yummy() {
System.out.println("Yummy Cake");
}
}
class CheeseCake extends Cake {
@override
public void yummy() {
System.out.println("Yummy Cheese Cake");
}
}
오버로딩 | 오버라이딩 | |
메소드명 | 동일 | 동일 |
매개변수 및 타입 | 다름 | 동일 |
리턴 타입 | 관계 없음 | 동일 |
(#다형성 : 하나의 객체가 여러가지 타입을 가질 수 있는 것)
오버로딩(Overloading)도 다형성을 구현하는 방법 중 하나
public class Parent {
public static void main(String[] agrs) {
Parent p1 = new Parent();
Parent p2 = new Child();
Parent p3 = new ChildOther();
13. 추상클래스와 인터페이스에 대해 설명하시오. ●
추상클래스: 여러가지 클래스들 간에 비슷한 필드와 메서드를 공통적으로 추출해 만들어진 클래스이며 다중 상속이 불가능함.
인터페이스: 일종의 추상클래스, 추상클래스처럼 추상메소드는 갖지만 추상클래스보다 추상화 정도가 높다.
implements 키워드를 사용한다. Extends는 하나의 클래스만 상속 가능하나 Interface는 다중상속이 가능
14.제넥릭은 무엇인가?
내부 데이터 타입을 컴파일 시 미리 지정하는 방법이다
제네릭 이전의 프로그래밍에서는 인수나 반환값으로 Object 타입을 사용했다 이 경우에는 반환된 Object 객체를 다시 원하는 타입으로 타입 변환해야 하며, 이때 오류가 발생할 가능성도 존재한다.
하지만 제네릭을 사용하면 컴파일 시에 미리 타입이 정해지므로, 타입 검사나 타입 변환과 같은 작업을 생략할 수 있다.
15. 배열과 ArrayList의 차이점은 무엇인가?
1) 배열의 크기
① 배열 : 배열의 크기는 한 번 정하면 변경이 불가하다.
② ArrayList : 저장하는 데이터 수에 따라 크기가 가변한다.
- 데이터 추가 add(index, element) : 2개의 인자를 넣으면 특정 인덱스에 저장 가능
- 데이터 삭제 remove(index) : 특정 인덱스의 데이터를 삭제 가능
- 데이터 가져오기 get(index) : 특정 인덱스의 데이터를 가져올 수 있다.
2) 데이터 자료형
① 배열 : 배열은 기본자료형 / 참조형 모두 저장이 가능하다.
② ArrayList : Object형으로만 저장할 수 있다.(기본형 x)
3) 길이
① 배열 : 길이를 반환하는 메소드로 length 변수를 사용
② ArrayList : 길이를 반환하는 메소드로 size( ) 메소드를 사용
4) 추출 및 조회
① 배열 : for나 for-each등의 제어문으로만 배열을 순회할 수 있다.
② ArrayList : for loop은 물론 iterator를 사용해 배열을 순회할 수 있다.
16.스택과 링크드리스트와 리스트의 차이점을 설명해 보세요.
LinkedList
LinkedList는 불연속적(비순차적)으로 존재하는 데이터를 서로 연결(link)한 형태로 구성되어 있음.
LinkedList는 삭제가 간담함. (삭제하고자 하는 요소의 이전요소가 삭제하고자 하는 요소의 다음 요소를 참조하도록 변경하기만 하면 되므로 삭제가 간담함)
LinkedList는 새로운 데이터 추가하는 처리속도가 매우 빠름. (새로운 요소를 추가할 때는 새로운 요소를 생성한 다음 추가하고자 하는 위치의 이전 요소의 참조를 새로운 요소에 대한 참조로 변경해주고, 새로운 요소가 그 다음 요소를 참조하도록 변경하기만 하면됨)
LinkedList는 ArrayList와 비교했을 때 데이터를 추가/변경할 때 유리함.
List
List인터페이스를 구현한 자료구조는 ArrayList(클래스), LinkedList(클래스), Vector(클래스), Queue(인터페이스).
순서가 있는 데이터의 집합. 데이터의 중복을 허용함.
Stack
클래스로 구현되어 있으므로 상속받으면 사용가능.
Stack은 마지막에 저장한 데이터를 가장 먼저 꺼내게 되는 LIFO(Last In First Out)구조로 되어 있음.
Stack은 순차적으로 데이터를 추가하고 삭제하는 ArrayList와 같은 배열기반의 컬렉션 클래스가 적합.
17. 자바 컬렉션프레임워크의 대표 인터페이스는 무엇이 있나요?
컬렉션 프레임워크는 데이터(객체)를 효율적으로 추가, 삭제, 검색하기 위해 특정 알고리즘을 적용해 구현한 인터페이스를 말합니다. Collection 인터페이스에는 List, Map, Set, Stack, Que가 있습니다.
각 인터페이스의 특징을 간략하게 설명하면 List는 순서가 있고 배열과 유사하게 인덱스로 데이터를 저장 및 관리하며 중복을 허용합니다. Map은 key와 value의 쌍의로 이루어진 데이터의 집합으로 key값은 중복이 허용되지 않지만 value는 중복이 허용됩니다. Set은 순서가 없는 데이터의 집합이며 중복을 허용하지 않습니다.
Stack은 마지막에 넣은 요소가 먼저 나오는 특징을 가지고 있는 것과 반대로 Queue는 먼저 들어간 데이터가 먼저 나오는 구조를 가지고 있습니다. 추가적으로 Deque은 Stack과 Queue를 합친 형태를 가지고 있습니다.
18.접근제어자의 종류와 특성에 대해 성명하세요
public : 모든 접근을 허용
protected : 같은 패키지(폴더)에 있는 객체와 상속관계의 객체들만 허용
default : 같은 패키지(폴더)에 있는 객체들만 허용
private : 현재 객체 내에서만 허용
19. hashCode()값이 모두 같다면 어떤 일이 벌어질까요?
그러면 비교 기준을 무엇으로 삼을까요? hashCode 값마저 같다면?
2개가 모두 Dog 객체였다면, identityHashCode 값으로 비교합니다. 이것을 가지고 균형 트리를 맞춥니다. 맞추는데, 이 두 값이 같은 경우도 있습니다. 이 때에는 -1을 리턴합니다. (??? 금환님 대체 뭘 가져온거지)
객체 주소가 같다면 hashCode()값은 같습니다.
String의 경우
String a = "자바" 와
String b = new String("자바")의
hashcode는 서로 다른 값이어야 합니다.
그런데,
String 클래스 입장에서 a와 b는 같은 객체 입니다.
같은 문자열이니까요.
같은 문자열을 갖는 두 객체의 hashcode가 다르다면,
hashcode의 의미가 없어진다고 볼 수 있지 않을까요
hashcode를 활용해서 Map이나 Set에 저장된 key값을 찾아야 하는데,
같은 객체인데도 불구하고 hashcode값이 다르니,
제대로 찾을 수가 없겠죠.
그러므로 인위적으로 String클래스 안에서의 hashcode메소드를 재정의하여
같은 String객체에 대해(equals 리턴값이 true) hashcode가 같아지도록 만들어 준 것입니다.
Q. hashCode가 같다면, equals가 반드시 트루인가 ??
답은 아닙니다.
실제 String의 경우 서로 다른 문자열이 (equals리턴값은 false)이지만 같은 hashCode를 리턴하는 경우가 생깁니다.
hashCode의 값은 객체마다 유일한 값이 아니라는겁니다.
20. Hashtable과 HashMap 차이점은 무엇인가요?
-중복 키에 대한 처리로 해시테이블은 키가 같은 값을 두 번 넣게 되면 초기 값을 유지하게 되고, 해시맵은 키가 같은 값을 두 번 넣게 되면 두번째 값으로 덮어버리는 차이가 있다. 해시맵은 키에 널 값을 허용한다.
21. 객체의 직렬화는 무엇이고 직렬화 대상이 되기 위해서 어떤 인터페이스를 구현해야 하나요?
자바 직렬화란 자바 시스템 내부에서 사용되는 객체 또는 데이터를 외부의 자바 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터 변환하는 기술이다.
직렬화를 하기 위해서는 Serializable 인터페이스를 생성해주면 된다.
22. 자바로 자판기를 설계 할 때, 어떻게 설계 할 것인지 설명해 주세요.
1. 제품을 보여준다
2. 고객이 돈을 넣었는지 확인한다
3. 고객이 넣은 돈을 제품 가격과 비교한다
4. 고객이 넣은 돈이 제품가격 보다 작은가? => 돈을 더 넣어달라는 알람이 들어온다
5. 고객이 넣은 돈이 제품 가격보다 큰가? => 제품을 내어 준다.
6. 제품을 내주고도 고객이 넣은 돈이 남았는가? => 제품을 다시 보여주고, 거스름 돈의 알람을 같이 띄운다
7. 고객이 제품을 선택하면 3~6을 반복한다.
8. 고객이 거스름돈을 선택하면 남은 거스름돈을 내어준다.
23. 라이브러리와 프레임워크의 차이점은? ●
라이브러리 Library
라이브러리란? maven에서 맨날 받는거. .jar파일. 즉 클래스들의 모임
Javascript의 라이브러리는 jQuery이고 클래스의 라이브러리는 OOP이다.
미리 작성된 코드, 변수, 함수, 클래스가 포함될 수 있으며 개발자가 개발하는데 필요한 것들을 모아둔 도구들의 나열로 필요할 때 호출하여 사용할 수 있다. 즉 프로그램 기능 수행을 위해 활용이 가능한 도구들의 집합이다.
프레임워크 Framework
자바의 컬랙션 프레임
Java의 프레임워크는 Spring, Python의 프레임워크는 django 그리고 PHP의 프레임워크로는 Laravel이 있다.
소프트웨어 애플리케이션이나 솔루션 개발을 수월하게 하기 위해 소프트웨어의 구체적 기능들에 해당하는 부분의 설계와 구현을 재사용 가능하도록 협업화된 형태로 제공하는 소프트웨어 환경이다.
프레임워크는 애플리케이션 개발시 필수적인 코드, 알고리즘, 데이터베이스 연동 등과같은 기능을 위해 뼈대를 제공해준다. 그리고 개발자는 그 뼈대 위에서 코드를 작성하여 애플리케이션을 완성한다. 객체지향 개발을 하면서 일관성 부족 등의 문제를 해결해 준다. 완성된 제품을 만들기 위해 개발자를 도와주고 기반이 되는 역할을 해준다. 소프트웨어의 특정 문제를 해결하기위해 상호 협력하는 클래스와 인터페이스의 집합니다.
Spring: 남들이 특수한 목적으로 만든 라이브러리의 모임을 가져다 쓰는 것이 스프링
자바 컬랙션 프레임: 셋리큐맵(set list que map)
라이브러리와 프레임워크의 차이
흐름(Flow)에 대한 제어 권한이 어디에 있느냐의 차이가 있다.
쉽게 말하자면 프레임워크는 House(집)이고 라이브러리는 Furniture(가구들) 같은 것이다.
프레임 워크는 전체적인 흐름을 자체적으로 가지고 있으며 프로그래머가 그 안에 필요한 코드를 작성하는 반면, 라이브러리는 프로그래머가 흐름에 대해 제어를 하며 필요한 상황에 자신이 원하는 기능을 구현하고 싶을 때 가져다 쓰는 것이다. 프레임워크에는 제어의 역전(Inversion of Control)이 적용되어 있다.
[WEB]
1.MVC 패턴에 대해 동작방식을 설명해 주세요.
# MVC
- Model : DATA, 정보들의 가공을 책임지는 컴포넌트를 말합니다.
- Conrtoller : 모델(Model)과 뷰(View) 사이를 이어주는 브릿지(Bridge) 역할을 의미합니다.
- View : 사용자에게 보여지는 부분, 즉 유저 인터페이스(User interface)를 의미합니다.
# MVC 동작 순서
브라우저에서 요청을 받는 경우(JSP/Servlet)
request (request를 받아서) request 데이터베이스 연결
사용자 ──────── 컨트롤러 ─────────Model클래스 ─────────데이베이스(DAO)
결과값을 받는다 request에 값을 담아서 (setAttribute())
──────────Model클래스 ─────────컨트롤러 ─────────JSP로 전송 ────> 사용자
사용자가 보내준 request를 이용해서 ──> 결과값을 담아 준다 ──> (request는전체 동일하다)
Call By Reference
2. model 1과 model 2패턴의 차이를 설명해 주세요.
1) model1 패턴 :
model 1은 JSP 또는 Servlet을 사용하고
JSP 또는 Servlet이 요청에 대해서 모든 응답을 처리 한다.
요청 :
request,
valiating data,
handling businness logic,
generating response
model 1 은 business 로직과 presentation 로직이 결합되어 있다.
model 1 은 작고 , 개발하기 쉬운 간단한 기능에 사용된다.
model 2는
content를 다루고 구하는데 사용되는 로직으로 부터
content의 display가 분리 되어 있다.
model 2는 logic과 display를 분리한다.
model-view-controller (MVC) 로
구성이 되어진다.
정확게 MVC 안의 model 은 model 2 디자인에 의해서 결정된 것은 아니다.
model 2 어플리케이션에서는
client browser 가 controller 로 request하고
controller 는
display를 위한 content을 얻어오는데 필요한 logic을 구성한다.
controller는 request를 전달할 view을 결정한다.
view는
controller 에 의해서 content 전달 된 것을 render 한다
(화면을 구성한다.)
model 2는 중간이나 큰 크기의 어플리케이션에 적합하다.
3. JSTL은 무엇이고 사용하는 이유는 무엇인가요?
#정식명칭
자바서버 페이지 표준 태그 라이브러리 (JAVAServer Pages Standard Tag Library)이다. Java EE기반의 웹 어플리케이션 개발 플랫폼을 위한 컴포넌트 모음이다.
JSTL + EL의 조합이고, EL의 정식 명칭은 표현 언어(Expression Language)라고 하여 줄여서 EL이라고 부른다.
Java EE은 자바로 구현되는 웹프로그래밍에서 가장 많이 사용되는 JSP, Servlet을 비롯하여, 데이터베이스에 연동하는 JDBC와 같은 많은 기술들이 포함되어 있다.
웹 어플리케이션은 소프트웨어 관점에서 인터넷이나 인트라넷을 통해 웹 브라우저에서 이용할 수 있는 응용 소프트웨어를 말한다.
컴포넌트(component)은 여러 개의 프로그램 함수들을 모아 하나의 특정한 기능을 수행할 수 있도록 구성한 작은 기능적 단위. 컴포넌트를 이용하면 소프트웨어 개발을 쉽게 조립할 수 있다. 이것을 모듈이라고도 한다.
#사용하는 이유
- 다른 JSP페이지 호출
- 데이터베이스로의 입력, 수정, 삭제, 조회 가능
- XML문서의 처리 가능
- 문자열을 처리하는 함수 호출
- JAVA의 장점을 그대로 사용
- 다양한 Servlet간의 데이터 공유
- 많은 사용자의 원활한 접속처리
- Java Beans의 활용
- 사용자 특화 커스텀 태그 라이브러리
#면접 시 암기력 킹들만
자바로 구현되는 웹프로그래밍에서 가장 많이 사용되는 JSP, Servlet, 데이터베이스 연동을 비롯하여, 개발 플랫폼에 사용되는
프로그램 함수들을 모아 XML 테이터 처리와 조건문, 반복문과 같은 기능을 수행할 수 있도록 구성한 작은 기능적 단위입니다.
#면접 시 암기력 No들만
자바로 구현되는 웹프로그래밍에서 가장 많이 사용되는 Servlet(서블렛)에 사용하는
프로그램 함수들을 모아 XML데이터 처리와 같은 기능을 수행할 수 있도록 구성한 것입니다.
4. JSP에서 세션에 값을 저장하고 꺼내는 방법은 무엇인가요?
세션에 값 저장하기 위해서는 session 객체의 setAttribute 메소드를 사용
세션에 저장된 값을 얻기 위해서는 session 객체의 getAttribute 메소드를 사용
5. jsp에서 한글이 깨지는 문제가 발생시 어떻게 해야 하나요?
파일의 인코딩 방식과, 웹 브라우저가 사용하는 인코딩 방식이 서로 달라서 나타나는 문제로,
하나의 인코딩 방식으로 통일 해 주어야 합니다.
현재 한국에서 사용되는 인코딩 방식으로는 크게 euc-kr 방식과 UTF-8 방식이 있습니다.
euc-kr은 국가 언어코드. 즉 우리나라에서만 쓸 수 있도록 만든 코드이며 세계 어디에서나 공통으로 사용되는 인코딩 방식이 아니기 때문에, 다른 언어를 사용하는 환경(외국 등)에서는 한글 페이지를 제대로 볼 수 없는 문제가 발생합니다.
이를 해결하기 위해 새로운 인코딩 방식이 개발되었는데, 그중 가장 보편화된 인코딩이 UTF-8입니다.
JSP의 <head> 태그 안에
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
를 삽입하면 됩니다.
6.JSP는 무엇인가여?
Java Sever Page의 약자임.
JSP 란 JavaServer Pages 의 약자이며
HTML 코드에 JAVA 코드를 넣어 동적웹페이지를 생성하는 웹어플리케이션 도구이다.
JSP 가 실행되면 자바 서블릿(Servlet) 으로 변환되며 웹 어플리케이션 서버에서 동작되면서 필요한 기능을 수행하고
그렇게 생성된 데이터를 웹페이지와 함께 클라이언트로 응답한다.
7. Servlet이란 무엇인가요?
> 클라이언트의 요청을 처리하고 그 결과를 반환하는 Servlet클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술이다. 일반적으로 웹서버는 정적인 페이지만 제공하는데 동적인 페이지를 제공하기 위해서 Servlet을 사용한다. (여기에서 동적인 페이지란 사용자의 요청에 따라 변화되는 무언가를 제공하는 것을 말한다.)
>MVC패턴 중에서 Controller로 이용된다.
>Servlet 동작 과정
1. 사용자(클라이언트)가 url을 입력하면 http Request를 서블릿 컨테이너로 전송
2. 전달받은 서블릿 컨테이너는 HttpServletRequest와 HttpServletResponse객체를 생성한다.
3. web.xml이 요청받은 url을 분석하여 어느 서블릿에 요청한 것인지 찾는다
4. 해당 서블릿에서 service메소드를 호출한 뒤에 get,post여부에 따라서 doGet()이나 doPost()를 호출한다.
5. 호출한 메소드는 동적페이지를 생성한 뒤에 HttpServletResponse객체에 응답을 보낸다.
6. 응답이 끝나면 생성한 두 객체를 소멸시킨다.
8. ajax 란 무엇인가요?
Asynchronous JavaScript And XML web page가 load 된 이후에, web server 로 부터 data를 읽어 올 수 있다page를 reload 하지 않고 web page를 update할 수 있다.background 에서 web server로 data를 보낼 수 있다.
9. RESTful은 무엇이라고 생각하시나요? ●
웹에 존재하는 모든 자원(이미지,동영상 DB자원등)에 고유한 URI를 부여해 활용하는 것으로, 자원을 정의하고 자원에 대한 주소를 지정하는 방법론을 의미합니다. 하나의 URI 는 하나의 고유한 리소스를 대표하도록 설계된다는 개념에 전송방식을 경합해서 원하는 작업을 지정합니다.
URI 설계시 주의 사항들은 다음과 같습니다.
URI 경로에는 대문자보다 소문자를, 동사보다는 명사를 사용하여야한다. 슬래시 구분자(/)는 계층 관계를 나타내는데 이용한다. URI 마지막 문자 뒤에 슬래시 구분자(/)를 포함하지 않는다. 언더바 대신 하이폰을 사용한다. 행위와 파일 확장자의 구호를 포함하지 않는다입니다.
보통 CRUD의 기능을 POST 방식만으로 처리가 아닌, Create(생성)는 POST , Read(조회)는 GET, Update(수정)는 PUT,PATCH, Delete(삭제)는 DELETE 에 매칭시켜 예측 가능하게 만들곤 합니다.
다만 이는 표준 규약이 아닌 일종의 약속으로, 사람마다, 기관마다 작성방식에 차이가 있을 수 있다는 단점이 있습니다.
10. 쿠키와 세션의 차이 ●
쿠키와 세션은 비슷한 역할을 하며, 동작 원리도 비슷하다. 그 이유는 세션도 결국 쿠키를 사용하기 때문이다. 큰 차이점은 사용자의 정보가 저장되는 위치이다. 쿠키는 서버의 자원을 전혀 사용하지 않으며, 세션은 서버의 자원을 사용한다. 보안 면에서 세션이 더 우수하며, 쿠키는 클라이언트 로컬에 저장되기 때문에 변질되거나 request에서 스니핑 당할 우려가 있어서 보안에 취약하지만
세션은 쿠키를 이용해서 session-id만 저장하고 그것으로 구분하여 서버에서 처리하기 때문에 비교적 보안성이 높다.
라이프 사이클은 쿠키도 만료기간이 있지만 파일로 저장되기 때문에 브라우저를 종료해도 정보가 유지될 수 있다. 또한 만료기간을 따로 지정해 쿠키를 삭제할 때까지 유지할 수도 있다.
반면에 세션도 만료기간을 정할 수 있지만, 브라우저가 종료되면 만료기간에 상관없이 삭제된다.
속도 면에서 쿠키가 더 우수하며, 쿠키는 쿠키에 정보가 있기 때문에 서버에 요청 시 속도가 빠르고
세션은 정보가 서버에 있기 때문에 처리가 요구되어 비교적 느린 속도를 낸다.
보통 쿠키와 세션의 차이에 대해서 저장 위치와 보안에 대해서는 잘 알고 있지만, 사실 가장 중요한 것은 라이프사이클이다.
11.Get/Post 전송방식의 특징을 말해 주세요. ●
Get은 가져온다는 개념이고, Post는 수행한다는 개념으로 Get은 서버에서 어떤 데이터를 가져와서 보여줄때 사용합니다. 어떤 값이나 내용, 상태등을 바꾸지 않는 경우에 사용을 하는것입니다.
이에비해, Post는 서버상의 데이터 값이나 상태를 바꾸기 위해서 사용합니다.
12. jquery를 사용한 후 느낀 점은 무엇인가요?
-자바스크립트로 만들어진 라이브러리 언어로 자바스크립트에서 발생한 호환성 문제를 해결 할 수 있으며 여러 가지 불편한 점을 개선하였기에 사용이 편리합니다.애니메이션 효과 등의 구현이 자바스크립트오 어려웠지만 쉽게 해주는 아주 편리한 라이브러리입니다.
[Spring Framework]
1. 스프링 프레임워크의 특징에 관해 설명해 주세요
- 첫 번째 특징으로는 의존성 주입(DI)으로 하나의 객체가 다른 객체의 의존성을 제공하는 것입니다. 두 번째 특징으로는 제어의 역전(IoC)으로 객체의 생성부터 소멸까지 객체의 모든 생명주기를 개발자가 아닌 컨테이너가 담당하는 것을 말합니다. 마지막으로 IOC 컨테이너는 스프링 프레임워크에는 객체를 생성하고 관리하고 의존성을 관리해 주는 컨테이너가 있는데 그것이 바로 IoC 컨테이너입니다. 스프링 컨테이너라고도 부릅니다.
2. DI란 무엇인가요?
(1) DI란 Dependency Injection의 줄임말로 한글로 번역하면 의존성 주입
"의존성 주입"은 제어의 역행이 일어날 때 스프링이 내부에 있는 객체들간의 관계를 관리할 때 사용하는 기법이다.
자바에서는 일반적으로 인터페이스를 이용해서 의존적인 객체의 관계를 최대한 유연하게 처리할 수 있도록 한다.
의존성 주입은 말 그대로 의존적인 객체를 직접 생성하거나 제어하는 것이 아니라,
특정 객체에 필요한 객체를 외부에서 결정해서 연결시키는 것을 의미한다.
즉, 우리는 클래스의 기능을 추상적으로 묶어둔 인터페이스를 갖다 쓰면 되는 것이다.
나머지는 스프링에서 객체를 주입해주기 때문이다.
따라서 이러한 의존성 주입으로 인해 모듈 간의 결합도가 낮아지고 유연성이 높아진다.
3. 자동으로 DI해주는 어노테이션은 어떤 것들이 있나요?
스프링 DI에서는 주로 사용하는 @Autowired 어노테이션, @Resource 어노테이션이 있습니다. Resource 어노테이션은 자바에서 제공하는 어노테이션이며, 스프링은 @Resource 뿐만 아니라 자바에서 제공하는 @Inject 어노테이션 등 다양하게 사용할 수 있습니다.
4. AOP란 무엇이고 어드바이스 종류를 말해주세요.
5.springMVC 동작방식을 설명해 주세요.
➀ Client에 요청을 받을 DispatcherServlet을 web.xml 파일에 설정
➁ Client의 요청을 처리할 Controller를 작성
➂ View Resolver 설정(Controller가 전달한 값을 이용하여 응답 결과 화면을 생성할 View를 결정함)
➃ jsp 등을 이용하여 View 영역의 코드를 작성
[Oracle DB]
1. 데이터베이스란 무엇이고 장단점은 무엇인가요?
- 장점
1. 데이터 중복의 최소화
각 응용 프로그램마다 자신의 파일이 개별적으로 유지 관리 되기 때문에 저장되는 데이터의 입장에서 보면 많은 데이터가 같은 내용을 표현하며 중복 저장되고 있다.
하지만 데이터베이스는 데이터를 통합하여 구성함으로써 이러한 중복을 사전에 통제할 수 있다.
2. 데이터의 일관성 유지
한 가지를 나타내는 두 개의 데이터가 있을 때, 하나의 데이터만 변경이 되고 다른 하나는 변경되지 않는다면 데이터간의 불일치성, 모순성을 갖게 된다.
그렇다면 서로 상충되는 정보를 제공하게 되고 데이터베이스의 유용성을 저해하게 된다.
데이터베이스 관리 시스템은 바로 이 데이터의 중복을 제어하고 중앙 집중식 통제를 통해 데이터의 일관성을 유지할 수 있다.
3. 데이터의 무결성 유지
데이터 중복성이 완전히 제거된다고 해도 허용되지 않는 값이나 부정확한 데이터가 여러가지 경로에 의해 데이터베이스에 잠입될 수 있다.
데이터베이스 관리 시스템은 데이터베이스가 생성 조작될 때마다 제어 기능을 통해 그 유효성을 검사함으로써 데이터의 무결성을 유지할 수 있다.
4. 데이터의 공용
기존 여러 응용프로그램들이 수행하던 데이터에 대한 유지관리 부담을 면제시켜줄 뿐만 아니라 새로 개발하는 응용 프로그램에 대해서도 데이터 구성에 신경 쓸 필요 없이 응용 자체에만 전념할 수 있게 해준다.
5. 데이터의 보안 보장
데이터베이스 관리 시스템은 데이터베이스를 중앙 집중식으로 총괄함으로써 데이터베이스의 관리 및 접근을 효율적으로 통제할 수 있다.
이것은 정당한 사용자, 허용된 데이터와 연상 등을 확인함으로써 모든 데이터에 대해 철저한 보안을 제공한다.
- 단점
1. 운영비의 증대
DBMS는 고가의 제품이고 컴퓨터 시스템의 지원을 많이 사용한다.
특히, 주기억장치를 많이 차지하기 때문에 DBMS를 운영하기 위해서는 메모리 용량이 더 필요하게 되고, 더 빠른 CPU를 요구하게 된다.
결과적으로 시스템 운영비의 오버헤드를 가중시키게 된다.
2. 자료 처리의 복잡화
데이터베이스는 상이한 여러 타입의 데이터가 서로 관련되어 있다.
응용 프로그램은 이러한 상황 속에서 여러 제한점을 가지고 수행될 지도 모른다.
따라서 응용 시스템은 설계 시간이 길어지게 되고 보다 전문적, 기술적 기술이 필요하기 때문에 고급 프로그래머가 필요하다.
3. 시스템의 취약성
DBMS는 통합된 시스템이기 때문에 그 일부의 고장이 전체 시스템을 정지시켜 시스템 신뢰성과 가용성을 저해할 수 있다.
4. 복잡한 예비와 회복
데이터베이스는 구조가 복잡하고 여러 사용자가 동시에 공용하기 때문에 예비(Backup) 조치나 사후 회복(Recovery) 기법을 수립해 놓는 것이 어렵다.
2. sql에 대해 설명해주세요.
- RDBMS(관계형 데이터베이스 관리 시스템)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이다
3.DDL , DML, DCL의 역할과 구문 예를 들어 설명하세요.
1) DDL 데이터 정의어
데이터베이스를 정의하는 언어이며, 데이터를 생성, 수정, 삭제하는 등의 데이터의 전체의 골격을 결정하는 역할을 하는 언어.
EX)
CREATE : 데이터베이스, 테이블등을 생성
ALTER : 테이블을 수정
DROP : 데이터베이스, 테이블을 삭제
TRUNCATE : 테이블을 초기화
2)DML 데이터 조작어
정의된 데이터베이스에 입력된 레코드를 조회하거나 수정, 삭제하는 역할을 하는 언어
EX)
SELECT : 데이터를 조회
INSERT : 데이터를 삽입
UPDATE: 데이터를 수정
DELETE : 데이터를 삭제
3)DCL 데이터 제어어
데이터베이스에 접근하거나 객체에 권한을 주는 역할을 하는 언어
EX)
GRANT : 권한 부여
REVOKE : 권한 회수
COMMIT : 작업결과를 저장하고 데이터베이스에 반영
ROLLBACK : 트랜잭션의 작업을 취소 및 복구
4.트랜잭션이란 무엇인가여?
1) 의미 : 하나의 작업을 수행하기 위해 필요한 데이터베이스의 연산작업 단위
→ 작업 수행에 필요한 SQL문의 집합
2) 기능 : 회복 작업과 병행 제어 처리를 위한 기본 단위
3) 특성
① 원자성(Atomicity)
- 트랜잭션에(하나의 작업단위) 속한 연산들이 모두 실행완료되거나 실행되지 않아야 한다.
- 연산이 부분적으로 실행되는 것은 허용되지 않는다.
② 일관성(Consistency)
- 트랜잭션이 성공적으로 수행된 후에도 데이터베이스는 일관된 상태를 유지해야한다.
③ 격리성(Isolation)
- 수행중인 트랜잭션이 완료될 때까지 다른 트랜잭션이 연산 중간에 접근할 수 없다.
④ 지속성(Durability)
- 트랜잭션이 성공적으로 완료된 후에도 데이터베이스에 반영된 수행 결과는 영구적이어야 함
4) Transaction의 주요연산
① commit
- 트랜잭션의 수행이 성공적으로 완료되었음을 선언하는 연산
- 실행되면 트랜잭션의 수행 결과가 데이터베이스에 반영되고 일관된 상태를 지속적으로 유지하게 됨
② rollback
- 트랜잭션의 수행이 실해했음을 선언하는 연산
- 실행되면 트랜잭션이 지금까지 실행한 연산의 결과가 취소되며, 데이터베이스가 트랜잭션 수행 전의 일관된 상태로 되돌아감
5) 트랜잭션의 상태
① 활동상태
- 트랜잭션이 실행중인 상태
② 부분완료
- 트랜잭션의 마지막 연산이 실행을 끝낸 직후의 상태
③ 완료상태
- 트랜잭션이 성공적으로 완료, commit 연산을 실행한 상태
: 최종 결과를 DB에 반영하고, DB가 새로운 일관된 상태가 되면서 트랜잭션이 종료됨
④ 실패상태
- 장애가 발생, 트랜잭션의 실행이 중단된 상채
⑤ 철회상태
- 트랜잭션의 실행 실패로 rollback 연산을 실행한 상태, 실행된 트랜잭션의 연산 과정을 취소, 수행되기 전의 상태로 DB를 되돌리면서 종료됨
5.기본키와 외래키에 대해 설명해주세요
테이블에 저장된 각각의 데이터를 유일하게 구분하는 키를기본키(Primary Key)라 부르며. 각 테이블 간에 연결을 만들기 위해서 테이블에서 다른 테이블의 참조되는 기본키 칼럼을외래키(Foregin Key)라 한다.
6번. where과 having의 차이는 뭔가요?
7. Group by 란 무엇인가요?
특정 컬럼값을 기준으로 그룹화함
8.Inner Join 과 Outer Join 의 차이점에 대해 설명하세요.
조인 (INNER JOIN) : 기준 테이블과 조인 테이블 모두 데이터가 존재해야 조회됨
아우터 조인 (OUTER JOIN) : 기준 테이블에만 데이터가 존재하면 조회되며 (+)가 붙음
조인 (INNER JOIN)
SELECT EMPLOYEE.ENAME||'의 매니저는 '|| MANAGER.ENAME||'입니다.' FROM EMP EMPLOYEE, EMP MANAGER WHERE EMPLOYEE.MGR = MANAGER.EMPNO;
아우터 조인 (OUTER JOIN)
SELECT EMPLOYEE.ENAME||'의 매니저는 '|| MANAGER.ENAME||'입니다.'
FROM EMP EMPLOYEE, EMP MANAGER WHERE EMPLOYEE.MGR = MANAGER.EMPNO(+);
9. 제약조건은 어떤 것이 있는 지 말해보세요.
not null : null값을 허용하지 않는다.
unique : 중복된 값을 허용하지 않는다.
primary key(기본키) : 항상 유일한 값을 가지도록 하며 비어 있을 수 없다.
foreign key(외래키) : 참조하는 테이블의 컬럼에 값이 존재하면 허용한다.
check : 미리 설정해둔 값 이외의 값이 들어오면 오류를 띄운다.
김보람 자바 1 web 7
정진광 자바 2 web 8
김대민 자바 3 web 9
김현택 자바 4 web 10
한수현 자바 5 web 11
이소영 자바 6 web 12
양세윤 자바 7 spring 1
김병민 자바 8 spring 2
권용원 자바 9 spring 3
오유빈 자바 10 spring 4
주은혜 자바 11 spring 5
엄선화 자바 12 oracle DB 1
윤정아 자바 13 oracle DB 2
문지윤 자바 14 oracle DB 3
김지훈 자바 15 oracle DB 4
마성주 자바 16 oracle DB 5
박소은 자바 17 oracle DB 6
송인규 자바 18 oracle DB 7
오금환 자바 19 oracle DB 8
김예림 자바 20 oracle DB 9
최제원 자바 21 web 4
김수빈 자바 22
정유정 자바 23
김용진 web 1
송승준 web 2
김설인 web 3
나예은 web 5
이찬승 web 6
'면접준비 > CS 기술 면접' 카테고리의 다른 글
오버로딩과 오버라이딩 (0) | 2022.03.06 |
---|---|
세션과 쿠키의 차이점 (0) | 2022.03.06 |
GET과 POST의 특징과 차이 (0) | 2022.03.06 |
라이브러리와 프레임워크의 차이점 (0) | 2022.03.06 |