본문 바로가기
728x90

전체 글259

[자바/Java] 파일 I/O - File 입출력 파일 입출력(I/O) 키보드에서 값을 입력(Scanner) 받고, 콘솔 창에 값을 출력(System.out.println)하는 과정은 익숙하다. 그렇다면 파일에서 값을 읽어오고(입력) 저장(출력)하려면 어떻게 해야 할까? 파일 입출력, Scanner 등은 모두 입출력이라는 범위 안에 존재하고 자바에서는 입출력을 수행하기 위해 스트림이라는 개념을 사용한다. 스트림(Stream)이란, 두 노드(키보드, 모니터, 메모리, 파일 등) 사이를 연결하는 데이터가 지나가는 통로이다. 스트림은 단방향 통신만이 가능하기 때문에 하나의 스트림으로 입출력을 같이 처리할 수 없다. 그렇기 때문에 입력 스트림, 출력 스트림 두 개의 스트림이 반드시 필요하다. 또한 스트림은 처리하는 데이터의 타입에 따라 아래와 같이 나뉜다. 이.. 2023. 10. 18.
[자바/Java] 쓰레드 Thread Thread란 쓰레드는 프로세스안에서 독립적으로 작업을 실행하는 단위를 말한다. 프로세스란, 일반적으로 CPU에 의해 메모리에 올려져 실행중인 프로그램을 말하며, 자신만의 메모리 공간을 포함한 독립적인 실행환경을 가지고 있다. 자바 JVM(Java Virtual Machin)은 주로 하나의 프로세스로 실행되며, 동시에 여러 작업을 수행하기 위해 멀티 쓰레드를 지원하고 있다. 멀티 쓰레드란 무엇일까? 쓰레드는 프로세스안에서 작업 실행 단위라고 하였는데, JVM에 의해 관리되고, 한 프로세스에는 적어도 하나 이상의 쓰레드가 있고, Main 쓰레드를 시작으로 추가적으로 작업 실행 단위를 늘려 갈 수 있다. 그렇게 되면 하나의 프로세스에서 실행되는 여러 작업들을 여러 개의 실행 단위, 즉 쓰레드들이 나눠서 처리.. 2023. 10. 17.
[자바스크립트/JavaScript] 변수 선언 변수 선언 자바스크립트에서 변수 선언 방식은, type명으로 선언하는 것이 아닌 아래의 3가지 키워드를 통해 생성할 수 있다. var 중복선언 O, 재할당 O let 중복선언 O, 재할당 X const 중복선언 X, 재할당 X 위의 키워드를 통해, 변수를 선언하고 각 변수의 타입은 변수의 할당 단계(초기화)에서 결정된다. var 변수 선언 var는 자바스크립트의 초창기부터 있었던 변수 선언 방식으로, 중복 선언과 재할당이 가능하며 마지막에 할당된 값이 변수에 저장된다. //var 선언 var str = "javascript"; console.log(str); //javascript //중복선언 O var str = "hello"; console.log(str); //hello //재할당 O var str.. 2023. 10. 16.
[자바/Java] 스트림 Stream - 심화 스트림 Stream 심화 이전까지는 스트림의 생성 - 중간 연산 -최종 연산으로 이어지는 기본 개념 및 사용방법에 대해서 다루었다. 이번 글에서는 더 나아가 스트림의 동작 순서, 성능 향상 등 더 깊은 내용에 대해 다루겠다. 동작 순서 성능 향상 스트림 재사용 지연 처리 Null-safe 스트림 생성 줄여쓰기 동작순서 스트림은 데이터의 흐름이다. 이때에 데이터의 흐름이 생성과 중간 연산, 최종 연산을 거쳐 흐르게 되는데, 구체적으로 어떻게 흐르는지에 대한 관찰이 필요하다. 다음 예제에서, 출력 결과는 어떻게 될까? List list = Arrays.asList("Eric", "Elena", "Era"); list.stream() .filter(el -> { System.out.println("filter.. 2023. 10. 15.
[자바/Java] 스트림 Stream - 최종 연산 https://codingralro.tistory.com/entry/%EC%9E%90%EB%B0%94Java-%EC%8A%A4%ED%8A%B8%EB%A6%BC-Stream-%EC%A4%91%EA%B0%84-%EC%97%B0%EC%82%B0 [자바/Java] 스트림 Stream - 중간 연산 https://codingralro.tistory.com/entry/%EC%9E%90%EB%B0%94Java-%EC%8A%A4%ED%8A%B8%EB%A6%BC-Stream-%EC%83%9D%EC%84%B1 [자바/Java] 스트림 Stream - 생성 스트림 (Stream) 이란 자바8에서 등장한 스트림은 람다를 활용할 수 있는 개념 codingralro.tistory.com 저번 글에서는 중간 연산에 대해 공부하였다.. 2023. 10. 15.
[자바/Java] 스트림 Stream - 중간 연산 https://codingralro.tistory.com/entry/%EC%9E%90%EB%B0%94Java-%EC%8A%A4%ED%8A%B8%EB%A6%BC-Stream-%EC%83%9D%EC%84%B1 [자바/Java] 스트림 Stream - 생성 스트림 (Stream) 이란 자바8에서 등장한 스트림은 람다를 활용할 수 있는 개념 중 하나이다. 스트림은 '집합 자료의 연산'을 위해 사용하는 객체로서 스트림이 등장하기 이전에는 배열 또는 컬렉션 codingralro.tistory.com 저번 글에서는 자바에서 스트림 객체를 생성하는 법에 대해서 다루었다. 이번 글에서는 생성한 스트림 객체를 어떻게 가공하는지에 대한 과정을 공부해보겠다. 중간 연산 - Stream 가공하기 스트림은 데이터의 흐름이다. 코.. 2023. 10. 15.
[자바/Java] 스트림 Stream - 생성 스트림 (Stream) 이란 자바8에서 등장한 스트림은 람다를 활용할 수 있는 개념 중 하나이다. 스트림은 '집합 자료의 연산'을 위해 사용하는 객체로서 스트림이 등장하기 이전에는 배열 또는 컬렉션 객체를 다루기 위해서 for 또는 forEach문을 돌면서 요소 하나씩을 꺼내서 다루었다. 간단한 경우라면, 이러한 방식은 크게 문제가 되지 않지만 로직이 복잡해질 수록 코드의 양이 많아지고 복잡해져 로직이 섞이게 되고, 메소드를 나눌 경우 루프를 여러번 도는 경우가 발생한다. 이러한 문제를 해결하고자 등장한 개념이 바로 스트림인 것이다. 스트림을 더 잘 이해하기 위해서는 단순히 집합 자료의 연산을 해주는 객체라는 것, 이전에 스트림이 데이터의 흐름이라는 것을 인지해야 한다. 스트림(Stream) = 데이터의.. 2023. 10. 15.
[자바/Java] Optional 개념 및 사용법 Opional 이란 자바의 가장 큰 고질적인 문제라고 하면 null을 체크해줘야 하는 문제를 꼽을 수 있다. NPE(NullPointerException)을 피하기 위해서는 꼭 null 여부를 체크해줘야 하기 때문에 코드가 길어지고 복잡해진다는 문제점이 발생하는 것이다. 이러한 문제를 보완하고자 Java8에서는 Optional 클래스를 통해 NPE를 방지할 수 있도록 도와준다. Optional는 null이 올 수 있는 값을 감싸는 Wrapper 클래스로, 참조하더라도 NPE가 발생하지 않도록 도와준다. Optional 클래스는 아래와 같은 value에 값을 저장하기 때문에 값이 null이더라도 바로 NPE가 발생하지 않으며, 클래스이기 때문에 각종 메소드를 제공해준다. class Optional { T .. 2023. 10. 15.
[자바/Java] 메소드 레퍼런스(Method Reference) 메소드 레퍼런스(Method Reference)란 메소드 레퍼런스란, 람다식에서의 클래스의 메소드 호출을 간단하게 표현을 하는 방법이다. 람다 표현식이 메소드 호출 1회로 끝나는 경우, 메소드 레퍼런스를 이용하여 코드를 더욱 간결하게 작성할 수 있는 것이다. 예시로 아래의 코드를 보면, @FunctionalInterface public interface class Test { void print(T t); } public class Main { public static void main(String[] args) { //메소드 레퍼런스 X Test t1 = (str) -> System.out.println(str); t1.print("hello"); //메소드 레퍼런스 O Test t2 = System:.. 2023. 10. 14.
[자바/Java] 함수형 인터페이스 함수형 인터페이스 이전 글인 lambda에서 함수형 인터페이스에 대해서 알아보았다. 하지만 매번 함수형 인터페이스를 직접 만들어서 사용하는 것을 번거로운 일이다. 그래서 Java에서는 기본적으로 많이 사용되는 함수형 인터페이스를 제공하고 있다. 기본적으로 제공되는 것만 사용하여도 대부분의 람다식을 사용할 수 있다. 함수형 인터페이스의 종류는 아래와 같다. Runnable : () -> void Supplier : () -> T Consumer : T -> void Function : T -> R Predicate : T -> boolean UnaryOperator : T -> T BinaryOperator : (T, T) -> T BiPredicate : (T, U) -> boolean BiConsume.. 2023. 10. 14.
[자바/Java] lambda 개념 및 사용법 람다(lambda)란 람다 함수는 프로그래밍 언어에서 사용되는 개념으로 익명 함수(Anonymous functions)를 뜻하는 말이다. 여기서 람다는 수학과기초 컴퓨터 과학 분야에서의 람다 대수에서 나온 용어로, 함수를 보다 단순하게 표현하는 방법을 뜻한다. Lambda = 프로그래밍적 동작을 보다 간단하게 표현한 이름 없는 함수 자바에서 람다 표현식(lambda-expression)은 Java8부터 도입된 개념이다. 람다 표현식은 추상 메소드가 하나뿐인 인터페이스를 구현하는 것이다. 그렇기 때문에 또 다른 말로, 함수형 인터페이스(functional interface)라고도 한다. 익명 함수라는 말에서 알 수 있듯이 익명 클래스를 더 간략화한 표현식(메소드 한개를 표현하기 위한 식)이라고 이해하면 더.. 2023. 10. 14.
[자바/Java] Inner 클래스 Inner Class 란? Inner Class란, 클래스나 인터페이스 내부에서 선언되는 클래스를 이너 클래스라고 한다. 이너 클래스를 사용할 시 다음과 같은 이점을 가지고 있다. 이너 클래스는 외부 클래스의 모든 멤버(변수, 메소드 등)에 접급할 수 있다는 관련성의 특별한 타입을 나타냄 이너 클래스는 논리 그룹 클래스와 인터페이스 내부에 있기 때문에 더 읽기 쉽고, 유지 가능한 코드 개발에 사용 적시 적소에 쓰면 불필요한 클래스의 낭비가 줄어든다. (1번 사용되는 클래스를 위해, 클래스 파일을 생성할 필요X) 이너 클래스는, 클래스 내부에서 어디에, 어떻게 선언되냐에 따라 여러 종류로 나뉜다. Member Inner Class : 다른 클래스 내부에서 선언된 클래스 Static Ineer Class :.. 2023. 10. 14.
728x90
반응형