Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

브래의 슬기로운 코딩 생활

JAVA 프로그래밍 기말고사 정리 본문

2-1/JAVA 프로그래밍

JAVA 프로그래밍 기말고사 정리

김브래 2023. 6. 21. 22:47

1교시 이론

 

Exception Handling의 필요성

Exception Handling은 프로그램의 안정성과 신뢰성을 높이기 위해 예외 상황을 적절하게 처리하는 중요한 개념이다. 이를 통해 프로그램이 예외 상황에 대응하고, 문제를 해결하며, 원활하게 실행될 수 있도록 할 수 있다.

 

중첩클래스, 익명 클래스를 설명하시오

중첩 클래스: 다른 클래스 내부에 정의된 클래스로, 외부 클래스와 밀접한 관련이 있어서 외부 클래스의 멤버와 데이터를 공유할 수 있다.

익명 클래스: 이름이 없는 클래스로, 클래스의 정의와 동시에 인스턴스를 생성하는 방식으로 일회성 작업에 유용하게 사용된다.

 

Generic 등장 배경 및 특징

Generic의 등장 배경:

- 재사용성 향상과 타입 안정성 강화를 목적으로 등장.

- 타입의 일반화를 가능하게 함.

- 매개변수화된 타입을 사용하여 유연하고 타입 안정성을 높인다.

- 컴파일 시점에서 타입 검사를 수행하여 오류를 사전에 방지한다.

 

Generic의 특징:

- 타입 매개변수를 사용하여 타입 일반화를 지원.

- 다중 타입 매개변수를 사용하여 다양한 타입 간의 관계 정의 가능.

- 타입 제한을 통해 특정 타입에 대한 제약 설정 가능.

- 재사용성과 유연성을 높여 코드 작성 가능.

- 컴파일 시점에서 타입 검사를 수행하여 타입 안정성을 보장

 

JCF 등장 배경 및 특징

등장 배경:

- 데이터를 효율적이고 표준화된 방식으로 저장, 관리, 조작하기 위해 등장했다. 기존의 배열과 관련된 자료 구조의 제약과 한계를 극복하고, 다양한 데이터 구조의 활용성과 유연성을 제공하기 위해 개발되었다.

 

특징:

- 인터페이스를 중심으로 설계되어 일관된 API를 제공하고 다른 구현체로의 교체가 용이하다.

- 제네릭(Generic)을 활용하여 타입 안정성을 보장하고, 재사용성과 유연성을 높여준다.

- 다양한 자료 구조를 제공한다. 리스트(List), 집합(Set), (Map)

- 데이터 구조의 조작, 정렬, 검색 등을 위한 알고리즘과 유틸리티 클래스를 포함하고 있다.

- 멀티스레드 환경에서의 안전한 동시 접근을 위한 동기화 메커니즘을 지원한다.

- 인터페이스를 통해 사용자 정의 자료 구조와 알고리즘을 추가할 수 있는 확장성을 가지고 있다.

 

Array vs. Vector vs. ArrayList 비교

- Array는 크기가 고정된 배열 구조이며, VectorArrayList는 동적으로 크기를 조정할 수 있는 배열 구조이다.

- Vector는 스레드 안전성을 제공하고, ArrayList는 그렇지 않다.

 

ArrayList, List, Collection, Iterable, Iterator 관계

ArrayListList 인터페이스를 구현한 클래스이고, ListCollection 인터페이스를 확장한 서브 인터페이스이며, CollectionIterable 인터페이스를 확장한 서브 인터페이스, IterableIterator를 반환할 수 있는 메서드를 가진 인터페이스이다.

 

Stream 등장 배경 및 특징

Stream의 등장 배경: 컬렉션과 배열을 처리하기 위한 간결하고 표현력이 뛰어난 연산 체인을 제공하여 데이터 처리를 더 효율적이고 선언적으로 처리하기 위해 등장했다.

 

Stream의 특징: 강력하고 효율적인 데이터 처리를 가능하게 한다.

 

Lambda 등장 배경 및 특징

Lambda의 등장 배경: 자바에서 함수형 프로그래밍 스타일을 지원하고 코드의 간결성과 가독성을 향상시키기 위해 등장했다.

 

Lambda의 특징: 익명 함수로서 간결한 표현과 함수형 프로그래밍을 지원하여 코드의 가독성과 유연성을 높이고, 메서드를 인수로 전달하거나 간단한 함수를 정의하는데 용이하다.

 

 

객체 정렬을 Stream & Lambda를 활용하여 정렬하시오.(예제 코드)

 

import java.util.ArrayList;

import java.util.Comparator;

import java.util.List;

 

public class Sorting {

public static void main(String[] args) {

// Person 객체 리스트 생성

List<Person> personList = new ArrayList<>();

personList.add(new Person("Alice", 25));

personList.add(new Person("Bob", 30));

personList.add(new Person("Charlie", 20));

 

// Stream을 활용하여 객체 리스트 정렬

List<Person> sortedList = personList.stream()

.sorted(Comparator.comparingInt(Person::getAge)) // 나이에 따라 오름차순 정렬

.toList(); // 정렬된 요소를 새로운 List로 반환

 

// 정렬 결과 출력

for (Person person : sortedList) {

System.out.println(person.getName() + " - " + person.getAge());

}

}

}

 

class Person {

private String name;

private int age;

 

public Person(String name, int age) {

this.name = name;

this.age = age;

}

 

public String getName() {

return name;

}

 

public int getAge() {

return age;

}

}

 

위의 코드에서 personListStream으로 변환한 후, sorted() 메서드에 Comparator.comparingInt()을 사용하여 Person 객체를 나이에 따라 오름차순으로 정렬한다. toList() 메서드를 호출하여 정렬된 요소를 새로운 List로 반환한다.

 

정렬된 결과를 출력하면, 나이에 따라 오름차순으로 정렬된 Person 객체 리스트가 출력된다.