반응형

자바 30

Java 재귀(Recursion)란?

재귀함수란?재귀의 사전적 의미는 '원래의 자리로 되돌아가거나 되돌아옴.' 이다. 정의를 참고하여 재귀를 코드로 표현한다면 다음과 같이 작성할 수 있을 것이다.public void recursion() { System.out.println("This is"); System.out.println("recursion!"); recursion();}recursion 메서드를 호출하면 자기자신을 끝없이 호출하며 같은 코드가 계속해서 실행되는 것을 볼 수 있다. 이 recursion 메서드처럼 자기 자신을 호출하는 함수를 재귀함수라고 한다. 재귀함스를 잘 활용하면 반복적인 작업을 해야하는 문제를 좀 더 간결한 코드로 풀어낼 수 있다.재귀함수의 장점은,불빌요하게 여러 개의 반복문을 사용하지 않기 때문에 코드가 ..

Java 스레드(Thread)란? 자바 기초 배우기

프로세스(Process)와 스레드(Thread)프로세스는 실행중인 애플리케이션을 의미한다. 프로세느는 데이터, 컴퓨터 자원, 스레드로 구성이 되는데, 스레드는 데이터와 애플리케이션이 확보한 자원을 활용하여 소스 코드를 실행한다. 즉 스레드는 하나의 코드 실행 흐름 이라고 볼 수 있다. 메인 스레드(Main thread)자바 애플리케이션을 실행하면 가장 먼저 실행되는 메서드는 main 메서드이며, 메인 스레드가 main 메서드를 실행시켜준다. 메인 스레드는 main 메서드의 코드를 처음부터 끝까지 차례대로 실행시키며 코드의 끝을 만나거나 return 문을 만나면 실행을 종료한다. 멀티 스레드(Multi-Thread)하나의 프로세스는 여러 개의 스레드를 가질 수 있고 이를 멀티 스레드 프로세스라 한다. 여러..

Java Optional Class 란? 자바 기초 배우기

Optional은 NullPointerException(NPE) 즉 null 값으로 인해 에러가 발생하는 현상을 객체 차원에서 효율적으로 방지하고자 도입되었다.  OptionalOptional 클래스는 모든 타입의 객체를 담을 수 있는 래퍼(Wrapper) 클래스이다.public final class Optional { private final T value; // T타입의 참조변수}Optional 객체를 생성하려면 of() 또는 ofNullable()을 사용한다. 참조변수의 값이 null 일 가능성이 있다면 ofNullable() 을 사용한다.Optional opt1 = Optional.ofNullable(null);Optional opt2 = Optional.ofNullable("123");Syste..

Java 스트림(Stream) 이란? 자바 기초 배우기

스트림(Stream) 이란?스트림은 배열, 컬렉션의 저장요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복자이다. 스트림을 사용하면 List, Set, Map 등 다양한 데이터 소스로부터 스트림을 만들 수 있고 이를 표준화된 방법으로 다룰 수 있다. 스트림 도입 배경데이터를 효과적으로 다루고 원하는 모양대로 데이터로 가공하기 위해 for문과 Iterator를 활용한다. 다만 이런 방식들은 두 가지 큰 문제점이 있는데 첫 번째로 코드가 길고 복잡해질 수 있다. 아래 예를 확인해보자. Iterator를 사용한 반복처리import java.util.Arrays;import java.util.Iterator;import java.util.List;public class PrintNumberOpera..

Java 람다식(Lambda Expression)이란? 자바 기초 배우기

람다식(Lambda Expression)람다식은 함수형 프로그래밍 기법을 지원하는 자바의 문법 요소이다. 람다식은 간단히 말해서 메서드를 하나의 식(expression)으로 표현한 것으로 코드를 매우 간결하면서 명확하게 표현할 수 있다는 큰 장점을 가지고 있다.다음의 예를 살펴보자.//기존 메서드 표현 방식void sayhello() { System.out.println("HELLO!")}//위의 코드를 람다식으로 표현한 식() -> System.out.println("HELLO!") 람다식에서는 기본적으로 반환 타입과 이름을 생략할 수 있다. 그러한 이유때문에 종종 이름없는 함수, 익명함수(anonymous) 라 부르기도 한다.아래의 예시를 통해 메서드를 람다식으로 만드는 방법에 대해 살펴보자. int..

Java 애너테이션(Annotation) 이란? 자바 기초 배우기

애너테이션이란?에너테이션은 소스 코드가 컴파일 되거나 실행될 때 컴파일러 및 다른 프로그램에게 필요한 정보를 전달해주는 문법 요소이다. 어떻게 생겼는지 직접 확인해보자. 먼저 아래와 같이 인터페이스를 정의해보자.public interface ExampleInterface { void example();} 그 다음 아래와 같이 클래스를 정의하고 ExampleInterface를 구현하자.public class ExampleClass implements ExampleInterface {} alt + insert 를 입력 후 Implement Methods를 클릭하여 ExampleInterface의 추상 메서드를 구현하자.OK를 눌러 입력을 완료하면 구현해야 하는 메서드가 자동으로 정의된다.public c..

Java 컬렉션 프레임워크란? 자바 기초 배우기

컬렉션 프레임워크컬렉션이런 여러 데이터의 집합을 의미한다. 이러한 컬렉션을 다루는데에 있어 편리한 메서드들을 미리 정의해 놓은 것을 컬렉션 프레임워크라고 한다. 컬렉션 프레임워크는 특정 자료구조에 데이터를 추가하고, 삭제하고, 수정하고, 검색하는 등의 동작을 수행하는 편리한 메서드들을 제공해준다. 컬렉션 프레임워크 구조주요 인터페이스로 List, Set, Map 을 제공한다. 각각의 인터페이스를 요약하면 아래와 같다.List- List는 데이터의 순서가 유지되며, 중복 저장이 가능한 컬렉션을 구현하는 데에 사용된다.- ArrayList, Vector, Stack, LinkedList 등이 List 인터페이스를 구현한다.Set- Set은 데이터의 순서가 유지되지 않으며, 중복 저장이 불가능한 컬렉션을 구현..

Java 제네릭(Generic) 이란? 자바 기초 배우기

제네릭의 필요성class Basket { private String item; Basket(String item) { this.item = item; } public String getItem() { return item; } public void setItem(String item) { this.item = item; }}위의 Basket 클래스는 오로지 String 타입의 데이터만 저장할 수 있는 인스턴스를 만들 수 있다. 그에 따라 다양한 타입의 데이터를 저장할 수 있는 객체를 만들고자 한다면, 각 타입별로 별도의 클래스를 만들어야한다. 하지만 아래와 같이 제네릭을 사용한다면 단 하나의 Basket 클래스만으로 모든 타입의 ..

Java 다형성(polymorphism) 이란? 자바 기초 배우기

다형성다형성(polymorphism)이란 여러개를 의미하는 poly와 어떤 형태 또는 실체를 의미하는 morphism의 결합어로 하나의 객체가 여러 가지 형태를 가질 수 있는 성질을 의미한다. 자바 프로그래밍에서 다형성은 한 타입의 참조 변수를 통해 여러 타입의 객체를 참조할 수 있도록 만든 것을 의미한다. 구체적으로 이야기 하면 상위 클래스 타입의 참조 변수를 통해서 하위 클래스의 객체를 참조할 수 있도록 허용한 것이라 할 수 있다.// 참조 변수의 다형성 예시class Friend { public void friendInfo() { System.out.println("나는 당신의 친구입니다."); }}class BoyFriend extends Friend { public ..

Java 내부클래스 (Inner Class) Java 기초 배우기

내부 클래스(Inner Class)내부 클래스는 클래스 내에 선언된 클래스로 외부 클래스와 내부 클래스가 서로 연관되어 있을 때 사용한다. 내부 클래스를 사용하면 외부 클래스의 멤버들에 쉽게 접근할 수 있고, 코드의 복잡성을 줄일 수 있다. 또한 외부적으로 불필요한 데이터를 감출 수 있어 캡슐화(encapsulation)을 달성하기 유용하다.class Outer { // 외부 클래스 class Inner { // 인스턴스 내부 클래스 } static class StaticInner { // 정적 내부 클래스 } void run() { class LocalInner { // 지역 내부 클래스 } }}위의 코드는 외부 클래스와 그 안에 포함될 수 있는 세 가지의 내부 클래스를 보여준다. 세 가지의 ..

반응형