Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
110 changes: 110 additions & 0 deletions temp/승환.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
<details>
<summary>this와 super의 차이를 알려주세요.</summary>
<br/>
this는 자기 자신의 메모리를 가르키거나, 생성자에서 다른 생성자를 호출할 경우에, 혹은 인스턴스 자신의 주소를 반환할 때 사용합니다.
이와 반대로 super는 상속관계에 있을 때 자식클래스에서 사용을 합니다. 자식 클래스에서 같은 이름의 데이터 멤버가 있는 경우 부모 클래스의 데이터 멤버에 액세스하거나, 부모 클래스의 기본 생성자, 혹은 매개 변수가 있는 생성자를 호출합니다. 또한 자식 클래스에서 재정의된 메서드가 있을 때, 부모 클래스의 메서드를 호출하고 싶은 경우에도 super를 사용합니다.

```java
class Animal {
String name;

// 부모 클래스의 생성자
Animal(String name) {
// this를 사용하여 인스턴스 변수와 매개변수 구분
this.name = name;
}

void sound() {
System.out.println(name + " makes a sound.");
}
}

class Dog extends Animal {
int age;

// 자식 클래스의 생성자
Dog(String name, int age) {
// super를 사용하여 부모 클래스의 생성자 호출
super(name);
// this를 사용하여 인스턴스 변수와 매개변수 구분
this.age = age;
}

// 부모 클래스의 메서드를 재정의
@Override
void sound() {
// super를 사용하여 부모 클래스의 메서드 호출
super.sound();
System.out.println(name + " barks.");
}

void displayInfo() {
// this를 사용하여 현재 객체의 메서드를 호출
System.out.println("Dog's Name: " + this.name);
System.out.println("Dog's Age: " + this.age);
}
}

public class Main {
public static void main(String[] args) {
Dog dog = new Dog("Buddy", 5);

// this 키워드를 사용하는 메서드
dog.displayInfo();

// super 키워드를 사용하는 메서드
dog.sound();
}
}
```
출력은 아래와 같다.

```md
Dog's Name: Buddy
Dog's Age: 5
Buddy makes a sound.
Buddy barks.
```
<br/>
</details>

<details>
<summary>List와 Stream의 차이에 대해 알려주세요.</summary>
<br/>
먼저 목적에 있어서 차이가 있습니다. List는 정보를 저장하는 것이 목적이라면, Stream은 데이터를 처리하는 데에 목적이 있습니다. 이러한 목적의 차이로 인해 데이터 변경의 가능성은 List에서는 있지만, Stream은 없고 저장 공간을 독립적으로 갖지 않습니다. Stream은 Lazy 실행을 구현하였기에 계산이 필요없는 데이터에는 관심이 없어 데이터 처리에서 list보다 상대적으로 빠르다는 장점이 있습니다. Stream은 또한 parallelStream을 사용하여 병렬화를 쉽게 할 수 있습니다.
<br/>
</details>

<details>
<summary>Java에서 직렬화가 무엇인지 설명해주세요.</summary>
<br/>
직렬화는 java에서 사용되는 object나 data들을 다른 컴퓨터의 java 시스템에서도 사용할 수 있도록 바이트 스트림 형태로 연속적인 데이터로 바꾸는 포맷 변환 기술입니다. JVM의 heap이나 stack 메모리에 상주하고 있는 객체 데이터를 직렬화를 통해 바이트 형태로 변환하여 외부 저장소에 저장하는 것입니다.

<br/>
<details style="margin-left: 20px;">
<summary>변환된 데이터를 다른 컴퓨터에서 어떻게 읽나요?</summary>
<br/>
직렬화된 데이터(바이트 스트림)를 네트워크나 파일 등으로부터 입력받은 후 이를 역직렬화하여 메모리에 원래의 객체를 다시 생성합니다. 이 때 기존 컴퓨터와 다른 컴퓨터는 동일한 클래스 구조를 공유하고 있어야 하고 serialVersionUID와 같은 클래스 버전이 일치해야합니다.

<br/>
</details>

<details style="margin-left: 20px;">
<summary>직렬화와 Json의 차이를 알려주세요.</summary>
<br/>
직렬화는 java에서만 사용하지만 json은 웹 뿐만 아니라 게임 등에서도 사용가능하고,
python, javascript 등 범용성 있게 사용이 가능합니다.

<br/>
</details>

<details style="margin-left: 20px;">
<summary>직렬화의 장점과 단점을 알려주세요.</summary>
<br/>
자바 직렬화의 장점은 먼저 자바에 최적화되어 있고, 자바의 reference 타입, 예를 들어 class나 interface에 대해 제약 없이 외부에 내보낼 수 있습니다.
단점으로는 직렬화는 데이터 뿐만 아니라 타입 정보, 클래스 메타 데이터 등을 가지고 있어 json에 비해 2배 이상 큽니다. 또한 역직렬화는 생성자 없이 인스턴스화가 가능하기에 보안 문제가 존재합니다.

<br/>
</details>
<br/>
</details>