본문 바로가기

Languages10

[Java] Stream API 개념 정리 Stream API란? JDK8부터 Stream API와 람다식, 함수형 인터페이스 등을 지원하면서 Java로 함수형 프로그래밍을 할 수 있는 API를 제공하고 있다. 이 중 Stream API에는 데이터를 처리하는데 자주 사용되는 함수들을 정의해 두었다. 이 API 를 이용하면 컬렉션 요소를 하나씩 차례대로 처리하여 원하는 결과를 얻을 수 있다. 필터링, 매핑, 정렬 등 다양한 방식으로 가공을 하며 코드의 가독성과 성능을 높일 수 있다는 특징이 있다. [Stream API을 사용하지 않았을 때] nameList를 선언해서 정렬 후 출력하는 코드다. 충분히 잘 짜여진 코드지만, 이를 Stream API를 이용하여 더 간결하게 정리할 수 있다. List nameList = new ArrayList(Arra.. 2023. 4. 14.
[Java] 멀티스레드 환경에서의 동시성 문제와 대책 스레드란? 프로세스는 실행중인 프로그램이란 뜻이다. 프로그램이 실제로 실행되어, 메모리나 CPU와 같은 자원을 할당 받으면 이를 프로세스라고 부른다. 스레드는 프로세스 내에서 실제로 작업을 수행하는 한 단위이다. 모든 프로세스는 하나 이상의 스레드가 존재하고, 두개 이상의 스레드를 갖는 프로세스를 멀티 스레드 프로세스(Multi Thread Process)라고 한다. 프로세스는 독자적인 메모리를 할당받기 때문에 프로세스끼리 일반적으로 서로의 메모리 영역을 침범하지 못한다.(공유할 수 없다) 하지만 프로세스 내부의 스레드는 같은 자원을 공유하여 사용이 가능하다. 같은 자원을 공유할 수 있기 때문에 동시에 여러가지 일을 같은 자원을 두고 수행할 수 있고, 이는 곧 병렬성의 향상으로 이어진다. 여러 스레드를 .. 2023. 4. 12.
[Java] equals(), hashCode()를 재정의 해야 하는 이유 객체의 동일성은 객체의 메모리 위치가 같은 지를 비교하기 때문에, 이는 자바에서 직접 제어할 수 없다. 따라서, 객체의 동일성은 equals()메서드나 hashCode()메서드와 별개의 개념이며, 앞서 말한대로 개발자가 직접 제어할 수 없다. 대신, 개발자는 equals()메서드와 hashCode()를 @Override로 재정의하여 객체의 동등성을 비교할 수 있다. 여기서 말하는 동등성은 객체 내용이 같은 지 비교하는 것을 의미한다. equals()와 hashCode()를 재정의한 예제를 살펴보자. public class Animal { private String name; private int age; public Animal(String name, int age){ this.name = name; t.. 2023. 4. 12.
[Java] 자바 Collection 개념 정리 & 예제 Collection Framework란? 객체, 데이터들을 효율적으로 관리 할 수 있는 자료구조들을 모아 놓은 라이브러리를 Collection Framework라고 한다. Collection Framework는 사용자에게 데이터 구조를 구현하는데 필요한 다양한 컬렉션 클래스를 제공한다. 아래 그림을 살펴보자. List와 Set인터페이스 모두 Collection 인터페이스를 상속받지만, 구조를 갖는Map 인터페이스는 구조상의 차이로 별도로 정의된다. List, Set, Map 인터페이스는 ArrayList, HashSet, HashMap과 같은 하위 클래스에 의해 구현된다. Collection Framework를 구성하고 있는 주요 인터페이스의 간략한 특징은 다음과 같다. 인터페이스 설명 구현 클래스 Li.. 2023. 4. 10.
[Java] 상속과 인터페이스 개념 정리 🤔상속(Inheritance)이란? 상속은 말 그대로 부모 자식 간의 상속을 의미한다. 부모 클래스를 상속 받는 다는 말의 뜻은, 부모 클래스의 클래스 변수, 메서드(private 불가), 를 재사용, 확장한다는 의미이다. Java에서 상속을 사용한 간단한 예시를 보자. Animal 클래스는 클래스 변수로 name필드를 갖고, move(), eat()메서드를 갖는다. Cat은 Animal을 상속받고 있으며, move()메서드를 오버라이드하여 “x 만큼 뒤로 움직인다”로 재정의하였다. class Animal{ protected String name; public Animal(String name){ this.name = name; } public void move(int x){ System.out.prin.. 2023. 4. 10.
[Java] 불변 객체(Immutable Object)란 무엇인가? 🤔불변 객체(immutable object)란? 불변 객체란 객체 생성 이후 내부의 상태가 변하지 않는 객체를 말한다. 즉, 한 번 생성된 불변 객체의 상태는 그 이후에 변경할 수 없다. Java의 대표적인 불변 객체로는 String이 있다. 다음과 같이 str를 String으로 선언해보자. 그럼 다음과 같이 문자열을 추가하면 어떻게 될까? str이 변경됐다고 생각할 수 있겠지만, 사실 “aa”라는 String 객체는 그대로 남아 있고, “aabb”라는 새로운 객체가 str에 할당된다. 즉, String은 불변 객체이다. 😄불변 객체 사용 시 장점은 무엇인가? 1. Thread-Safe하다. - 공유 자원이 불변이라면, 항상 동일한 값을 반환하기 때문에 더 이상 동기화를 고려하지 않아도 될 것이다. 따라.. 2023. 4. 9.