Java 16

자바 기초부터 모던 자바까지 - 함수형 프로그래밍 편

목표 : 자바에서의 함수형 프로그래밍에 대해 알아본다. 왜 함수형 프로그래밍이 도입되기 시작했을까? 객체 지향 프로그래밍의 정수였던 java에서 왜 새로운 패러다임을 도전하게 된 것일까? 결국에는 애플리케이션의 요구 조건 변경에 대응하는 절차였다. 먼저 그 흐름을 따라가 보도록 하자 여행 정보를 조회하는 클래스가 있다. 국가명을 통해 조회하며, 그 결과를 리스트로 제공한다. SearchTravel 이라는 이 클래스에는 searchTravelInfo(String country) 라는 메소드로 이를 제공하고 있었다. 새로운 요구사항이 등장했다. 국가명도 제공해야하지만, 도시명으로도 제공해야했다. 그에 따라 2가지 변경 방안이 등장하게 된다. 도시 정보를 파라미터로 받아서 처리할 수 있는 메서드를 추가한다. ..

Programming/Java 2022.07.03

자바 기초부터 모던 자바까지 - 인터페이스 편

목표 : 자바의 인터페이스에 대해 알아본다. 인터페이스 인터페이스가 무엇인지 그에 대한 개념을 설명하지는 않겠다. 자바는 다중상속을 지원하지 않는다거나, 추상화에 대한 내용을 모른다면 잘 정리된 다른 포스팅을 찾아 보도록 하자. 자바8부터 람다와 함수형 프로그래밍을 적용하기 위해 인터페이스를 활용하기 시작한다. 그럼 기존의 인터페이스에는 무슨 문제점이 있었고, 어떻게 진화해 온 것인지 먼저 알아보려 한다. 인터페이스의 문제점 인터페이스는 주로 여러 개의 구현체를 통일화한 명세서로 정의하기 위해 사용한다. 그러면 인터페이스를 구현한 클래스들은 동일한 메소드 명으로 통일성을 확보하고, 구현 방법에 상관없이 자신이 원하는 메서드를 호출해 목적을 이룰 수 있다. 그러나, 가장 치명적인 단점은 명세서기 때문에 수..

Programming/Java 2022.07.03

자바 기초부터 모던 자바까지 - 내부&중첩 클래스편

목표 : 자바의 내부&중첩 클래스에 대해 알아본다. Inner Class 클래스에 전반적인 내용을 모두 적진 않을 것이다. 객체 지향의 거대한 3요소인 상속, 다형성, 캡슐화 등에 대해서는 너무나도 많은 자료가 있으니 별도로 알아보도록 하자. 지금 알아볼 것은 Class안의 Class의 동작에 대해 알아볼 에정이다. Inner Class(내부 클래스)는 중첩 클래스라고도 표현하는 사람도 많지만, 약간 다르게 설명하는 경우도 있다. 중첩 클래스는 클래스나 인터페이스 내부에 static으로 선언된 클래스다. 포스팅을 위해 참고한 자료에서도 중첩 클래스는 내부 클래스와 동일 시하여 표현하고 있어, 하기 내용이 조금 헤깔릴 수 있으나 명확하게 구분하는 사람도 있으니 참고하도록 하자. 클래스 내부에 선언한 클래스..

Programming/Java 2022.07.02

자바 기초부터 모던 자바까지 - 객체 편

목표 : 자바의 객체의 개론을 알아본다. Object 객체가 무엇인지를 정의하고자 한다기 보다, 내가 아는 내용을 정리하고자 한다. 세상 모든 것을 개체라고 할 수 있다. 개체 중에서 내가 관심을 가지는 영역을 객체로 바라보자. 그리고, 그 객체의 성격과 행동, 서로간의 소통들을 정의해나갈 수 있을 것이다. 결국 그 객체에 대해 내가 관심이 있고, 다루고자 하는 영역들을 성격과 행동이라는 용어로 정리하다 보면 특정해 나갈 수 있게 된다. 이를 클래스라는 용어로 불러본다. 사람이라는 객체가 있다. 철학적인 물음으로 사람이란 무엇인가?에 대해서 대답하고자 하는건 아니다. (나라는 것은 무엇인가? 라는 질문으로 넘어가면 철학과 과학의 오묘한 결합이 나오게 된다) 그렇지만 우리가 원하는 어떠한 결과물을 위해서는..

Programming/Java 2022.07.02

자바 기초부터 모던 자바까지 - 기초편

목표 : 자바의 가장 기초적인 내용부터 알아본다. java만큼 아직 대중적인 프로그래밍 언어는 없다. 점차 포스팅으로 모던 자바에 대해 정리하겠지만, 알았으면서도 오랜만에 보면 새로울 수 있는 포인트들이 있다. 변수가 무엇인지, 자료형이 무엇인지 이런 내용은 아니지만, 조금은 익숙해져야 할 내용으로 작성하려 한다. 상수와 리터럴이 뭐지? 상수(constant)는 알다 시피, 변하지 않는 수를 말하고 final이라는 키워드를 쓴다. final을 쓰면, 변수는 상수가 되고, 상수는 변할 수 없다. 리터럴(literal)은 프로그램에서 사용하는 모든 숫자, 값, 논리 값 (ex> 10, 3.14, 'A', true)을 의미 한다. 그 중에서 리터럴은 상수풀(constant pool) 영역에 저장되어 있다. 변..

Programming/Java 2022.07.01

Serialize(직렬화)는 언제 쓰는걸까?

목표 : Serialize(직렬화)는 언제 쓰는건지 알아보자! 오늘의 목표에 따라, Serialize에 대해 알아보자. Java를 사용할 때, 정확하게는 Spring boot 로 서버개발을 하고 JPA 등 객체에 대한 연동을 할 때 Serialize는 언제 어디선가 보고 듣는다. Node.js의 Express로 서버를 배울 때는 JSON 규격만 신경을 썼고, Flask로 서버를 공부할 때도 별로 신경쓰지 않던 부분이지만 최근 Spring boot 로 개발하는 일이 잦아지면서, Serialize에 대한 개념이 어떤지에 대해 궁금해졌다. 특히, 최근에 실시간 음성 스트리밍에 대한 업무를 진행하면서, 다음 질문을 받았다. "혹시 JAVA로 개발하시나요? JSON이 아니라, Byte Array로 Serialze..

Programming/Java 2022.04.01