스프링 부트에 관해 더 공부하던 중 코딩을 함에 있어서 막히는 부분이 점차 많아졌다.내가 지금 필요한 공부는 프레임워크가 아닌 기초를 다지는 것이라고 생각하고 바로 자바의 정석기초편을 구매하여 앞으로 진행해 나갈 예정이다.
자바는 썬 마이크로시스템즈(Sun Microsystems, Inc.)에서 1996년 1월에 공식적으로 발표한 객체지향 프로그래밍 언어이다.자바의 가장 중요한 특징은 OS에 독립적이라는 것이다. 자바의 독자적인 JVM으로 운영체제의 종류에 관계없이 실행이 가능하다.자바는
기존의 언어는 한 운영체제에 맞게 개발된 프로그램을 다른 종류의 운영체제에 적용하기 위해서는 많은 노력이 필요하였지만, 자바에서는 더 이상 그런 노력을 하지 않아도 된다. 이것은 일종의 에뮬레이터인 JVM을 통해서 가능한 것인데, 자바 응용프로그램은 운영체제나 하드웨어
변수란? 하나의 값을 저장할 수 있는 저장공간이다.저장공간, 즉 변수가 필요하다면 먼저 변수를 선언해야 한다. 변수를 선언하는방법:위의 문장이 실행되면, x라는 이름의 변수(저장공간)가 생기고 해당 공간에 값을 저장할 때는 아래와 같이 적을 수 있다.저장공간의 값을 다
우리가 주로 사용하는 값(data)의 종류(type)는 크게 문자와 숫자로 나눌 수 있으며, 숫자는 다시 정수와 실수로 나눌 수 있다.이러한 값(data)의 종류(type)에 따라 값이 저장될 공간의 크기와 저장 형식을 정의한 것이 자료형(data type)이다. 자료
보통 우리가 화면 출력에 사용하는 메서드는 println() or print()이지만 변수의 값을 그대로 출력하므로 값을 변환하지 않고는 다른 형식으로 출력할 수 없다. 같은 값이라도 소수점 둘째자리까지만 혹은 정수를 16진수나 8진수로 출력할 때에는 printf()를
오버플로우란? 연산과정에서 해당 타입이 표현할 수 있는 값의 범위를 넘어서는 것을 오버플로우(overflow)라고 한다. 오버플로우가 발생했다고 해서 에러가 발생하는 것은 아니지만 예상했던 결과를 한참 벗어나는 값을 얻게 된다.만약 4 bit 2진수의 최대값인 1111
1. 숫자를 문자로 변환 - 숫자에 '0'을 더한다. 2. 문자를 숫자로 변환 - 문자에서 '0'을 뺀다. 3. 숫자를 문자열로 변환 - 숫자에 빈 문자열("")을 더한다. 4. 문자열을 숫자로 변환 - Integer.parseInt() 또는 Double.parseDouble()을 사용한다. 5. 문자열을 문자로 변환 - charAt(0)을 사용한다...
연산자 연산자란? 연산을 수행하는 기호를 말한다. 예를 들어 '+' 기호는 덧셈 연산을 수행하며, 덧셈 연산자 라고 한다. 자바에서는 사칙연산(+, -, *, /)을 비롯해서 다양한 연산자를 제공한다. 연산자와 피연산자를 조합하여 계산하고자 하는 바를 표현한 것을 '식
'x > 10'와 'x < 20'가 '그리고(and)'로 연결된 조건이므로 다음과 같이 쓸 수 있다.어떤 수가 2의 배수라는 얘기는 2로 나누었을 때 나머지가 0이라는 뜻이다. 그래서 나머지 연산의 결과가 0인지 확인하면된다. 또 2의 배수가 아니라 3의 배수일
제어문이란? 지금까지의 코드실행 흐름은 무조건 위에서 아래로 한 문장씩 순차적으로 진행됐지만 때로는 조건에 따라 문장을 건너뛰고, 때로는 같은 문장을 반복해서 수행해야 할 때가 있다. 이처럼 프로그램의 흐름(flow)을 바꾸는 역할을 하는 문장들을 '제어문(contro
난수(임의의 수)를 얻기 위해서는 Math클래스의 random()메서드를 사용한다 이 메서드는0.0이상 1.0미만의 범위에 속하는 하나의 double값을 반환한다.만일 1 과 3 사이의 정수를 구하고 싶다면 다음과 같은 과정으로 난수를 구할 수 있다.각 변에 3을곱한다
반복문은 어떤 작업이 반복적으로 수행되도록 할 때 사용되며, 반복문의 종류로는 for문과while문, 그리고 while문의 변형인 do-while문이 있다.for문과 while문은 구저와 기능이 유사하지만 반복횟수를 알고 있을 때에는 for문을, 그렇지 않을 때는 wh
배열이란? 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것을 '배열(array)'이라고 한다.많은 양의 데이터를 저장하기 위해서, 그데이터의 숫자만큼 변수를 선언해야한다면 매우 혼란스러울 것이다. 이름 정하기 마저 어려울 지경일 것이다. 이럴때 배열을 사용하여 하나
배열의 타입이 String인 경우에도 int배열의 선언과 생성 방법은 다르지 않다. 예를 들어 3개의 문자열을 담을 수 있는 배열을 생성하는 문장은 다음과 같다.초기화 역시 int배열과 동일하다.또는 괄호{}를 사용해서 다음과 같이 간단하게 초기화 할 수 있다.지금까지
지금까지의 배열은 1차원 배열인데, 2차원 이상의 배열, 즉 다차원 배열도 선언해서 사용할 수 있다. 메모리의 용량이 허용하는 한, 차원의 제한은 없지만, 주로 1, 2차원 배열이 사용된다.2차원 배열을 선언하는 방법은 1차원 배열과 같다. 다만 대괄호\[]가 하나 더
Arrays 클래스는 배열을 다루는데 유용한 메서드들을 제공한다. 이번 글에서는 기초적인 내용만 서술하고, Arrays클래스로 배열 활용하기(심화)에서 자세히 다룰 예정이다.toString()배열의 모든 요소를 문자열로 편하게 출력할 수 있다. 이미 많이 사용해서 익숙
객체지향언어는 기존의 프로그래밍언어와 전혀 다른 새로운것이 아니라, 기존의 프로그래밍 언어에 몇 가지 새로운 규칙을 추가한 보다 발전된 형태의 것이다. 이러한 규칙들을 사용해 코드간에 관계를 만들어 보다 유기적으로 프로그램을 구성하는것이 가능하다. 객체지향 언어의 주요
한개의 소스 파일에 하나의 클래스만을 정의하는 것이 보통이나, 하나의 소스파일에 둘 이상의 클래스를 정의하는 것도 가능하다. 이 때 주의해야 할 점은 '소스파일 이름은 public class의 이름과 일치해야한다.' 라는 것이다. 만일 소스파일 내에 public cla
Tv클래스를 예로 계속 들겠다. Tv클래스를 선언한 것은 Tv설계도를 작성한 것이고, 이를 Tv인스턴스로 생성해야 제품(TV)을 사용할 수 있다. 클래스로 부터 인스턴스를 생성하는 방법은 여러가지가 있지만 일반적으로는 다음과 같다. Tv t; Tv클래스 타입의 참조변
객체는 여느 타입들과 마찬가지로 배열에 저장할 수 있다. 기본형과는 다르게 객체 자체가 배열에 저장 되는것이 아니고 해당 객체의 주소들만 모아져 있는 배열이 생성된다.처럼 만들 수 있다. 이는 초기화가 안된 상태로 초기화를 같이 진행해 준다면 아래와 같이 만들수 있겠다
이전에 클래스는 객체를 생성하기 위한 틀이라고 객체지향적 관점에서 정의를 내린적이 있다.이번에는 프로그래밍 관점에서의 클래스의 정의를 알아보자.변수하나의 데이터를 저장할 수 있는 공간배열같은 종류의 여러 데이터를 하나의 집합으로 저장할 수 있는 공간구조체서로 관련된 여
변수는 클래스 변수, 인스턴스 변수, 지역변수 모두 세 종류가 있다. 이 종류들은 모두 선언된 위치에 따라 다르다.멤버 변수를 제외한 나머지 변수들은 모두 지역변수이며, 멤버 변수 중 static이 붙어 있는 것은 클래스 변수, 붙지 않은 것은 인스턴스 변수이다.인스턴
메서드란? 메서드는 특정 작업을 수행하는 일련의 문장들을 하나로 묶은것이다. 수학의 함수라고생각하면 편하다.수학과 다른점은 결과값이 없을수도 있고 심지어는 입력과 출력 둘 다 없을수도 있다.메서드는 원하는 값을 넣어 원하는 결과만 얻어내면 될 뿐 해당 메서드가 어떻게
생성자(constructor) 생성자란? 인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드'이다. 따라서 인스턴스 변수의 초기화 작업에 주로 사용되며, 인스턴스 생성 시에 실행돼야 하는 작업을 위해서도 사용된다. 생성자 역시 메서드처럼 클래스내에 선언할 수 있고
아래의 클래스를 하나 정의 해 보자.이제 해당 클래스의 아래와 같이 만들어 본다.매개변수로 각각 c, g, d를 받고 Car클래스의 멤버변수에 바로 초기화를 해 주는 생성자 이다.다만 이렇게 간단한 코드인 경우를 제외하고 다른 사람의 코드를 열어봤을때 이렇게 불명확한
초기화란? 변수를 선언하고 처음으로 값을 저장하는 것을 '변수의 초기화'라고 한다.멤버변수는 따로 값을 대입하지 않아도 자동으로 기본값으로 초기화 된다.위와같이 자료형에 따라 멤버변수는 자동으로 초기화가 되나, 지역변수는 자동으로 초기화가 되지 않는다.지역 변수와는 달
상속 상속이란? 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다. 상속을 통해서 클래스를 작성하면 보다 적은 양의 코드로 새로운 클래스를 작성할 수 있고 코드를 공통적으로 관리할 수 있기 때문에 코드의 추가 및 변경이 매우 용이하다. 상속을 구현하는 방법
super란? 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조변수이다. 멤버변수와 지역변수의 이름이 같을 때 this를 붙여서 구별했듯이 상속받은 멤버와 자신의 멤버가 이름이 같을 때는 super를 붙여서 구별할 수 있다.결과는 x = 20,
패키지란? 클래스의 묶음이다. 패키지에는 클래스 또는 인터페이스를 포함시킬 수 있으며, 서로 관련된 클래스들 끼리 그룹 단위로 묶어 놓음으로써 클래스를 효율적으로 관리할 수 있다.클래스는 한개의 패키지당 같은이름은 허용하지 않지만 패키지가 다르다면 얼마든지 같은 이름의
소스코드를 작성할 때 다른 패키지의 클래스를 사용하려면 패키지명이 포함된 클래스 이름을 사용해야 한다. 하지만, 매번 패키지명을 붙여서 작성하기란 여간 불편한 일이 아니기에 import문을 사용해서 미리 등록해 두는 것이다.위와같이 import로 java.util에들어
제어자란? 클래스, 변수 또는 메서드의 선언부에 함께 사용되어 부가적인 의미를 부여한다. 제어자의 종류는 크게 접근 제어자와 그 외의 제어자로 나눌 수 있다.접근제어자public, protected, (default), private그외static, final, abs
다형성이란? '여러 가지 형태를 가질 수 있는 능력'을 의미하며, 자바에서는 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 함으로써 다형성을 프로그램적으로 구현했다.조상 클래스 타입의 참조변수로 자손 클래스의 인스턴스를 참조할 수 있도록 하였다는 것이다.일
기본형 변수의 형변환 처럼 참조변수도 형변환이 가능하다. 단, 서로 상속관계에 있는 클래스 사이에서만 가능하기에 자손타입 참조변수 - 부모타입 참조변수 이 둘사이만 형변환이 가능하다. >조상의 조상으로도 형변환이 가능하기에 모든 참조변수는 Object클래스로 형변환이
추상 클래스란? 미완성 설계도에 비유할 수 있겠다. 클래스가 미완성이라는 것은 멤버의 개수에 관련된 것이 아니라, 단지 미완성 메서드(추상 메서드)를 포함하고 있다는 의미이다.따라서 추상 클래스로는 인스턴스를 생성할 수 없고 이 추상 클래스를 상속받은 자식 클래스에서,
인터페이스란? 추상 클래스처럼 추상 메서드를 갖지만 추상 클래스보다 추상화 정도가 높아서 일반 메서드(구현부가 구현된)또는 멤버변수(int x;등)를 구성원으로 가질 수 없다.오직 추상 메서드와 상수만을 멤버로 가질 수 있다.인터페이스도 추상 클래스처럼 완성되지 않은
내부 클래스란? 클래스 내에 선언된 클래스이다. 클래스에 다른 클래스를 선언하는 이유는 간단하다. 두 클래스가 서로 긴밀한 관계에 있기 때문이다.내부 클래스 형태로 클래스를 선언하면 멤버들 간에 서로 수비게 접근할 수 있다는 장점과 외부에는 감춤으로써 캡슐화를 할 수
익명 클래스란? 특이하게도 다른 내부 클래스들과 달리 이름이 없다. 클래스의 선언과 객체의 생성을 동시에 하기 때문에 단 한번만 사용될 수 있고 오직 하나의 객체만을 생성할 수 있는 일회용 클래스이다.이름이 없기 때문에 생성자를 가질 수 없고, 조상클래스의 이름이나 구
프로그램이 실행 중 어떤 원인에 의해서 오작동하거나 비정상적으로 종료되는 경우를 에러 또는 오류라고 한다. 이 오류가 발생하는 시점에 따라 '컴파일 에러'와 '런타임 에러'로 구분된다.'컴파일 에러'는 컴파일 시에 발생하는 에러이고, '런타임 에러'는 프로그램 실행 중
자바에서는 실행 시 발생할 수 있는 오류(Exception과 Error)를 클래스로 정의하였다. 앞서 배운 것처럼 모든 클래스의 조상은 Object이기에 Exception,Error모두 자손 클래스들이다. Object - Throwable - Exception,Err
checked, unchecked예외
예외를 처리하는 방법에는 지금까지 배운 try-catch문을 사용하는 것 외에, 예외를 메서드에 선언하는 방법이 있다.메서드에 예외를 선언하려면, 메서드의 선언부에 키워드 throws를 사용해서 메서드 내에서 발생할 수 있는 예외를 적어주기만 하면 된다. 그리고 예외가
사용자 정의 예외 기존의 정의된 예외 클래스 외에 필요에 따라 프로그래머가 새로운 예외 클래스를 정의하여 사용할 수 있다. 보통 Exception클래스 또는 RuntimeException클래스로부터 상속받는 클래스를 만들지만, 필요에 따라서 알맞은 예외 클래스를 선택할
예외 되던지기는 메서드작동중 발생한 예외를 메서드에서 try-catch문으로 처리한 다음 다시 throw를 통해 예외를 강제로 발생시키고 throws를 이용해 해당 메서드를 호출한 메서드에 전달한다.호출한 메서드의 try-catch문에서 예외를 또 다시 처리한다.이 방
한 예외가 다른 예외를 발생시킬 수도 있다. A예외가 B예외를 발생시켰다면, A예외는 B예외의 '원인 예외(cause exception)'이라고 한다.먼저 연결되어 발생할 예외를 생성하고, initCause()로 원인 예외의 인스턴스를 지정한다.그 후 연결되어 발생할
java.lang패키지는 자바프로그맹에 가장 기본이 되는 클래스들을 제공한다.java.lang.Object클래스는 모든 클래스의 최고 조상이기 때문에 Object클래스의 멤버들은 모든 클래스에서 사용 가능하다.Object클래스는 멤버 변수는 없고 오직 11개의 메서드만
기존의 다른 언어에서는 문자열을 char형의 배열로 다루었으나 자바에서는 문자열을 위한 클래스를 제공한다. char문자열을 저장하고 해당 문자열을 활용 할 메서드를 같이 제공하는 클래스이다.변경 불가능한(immutable)클래스String 클래스에는 문자열을 저장하기
String클래스는 인스턴스를 생성하고 지정된 문자열을 변경할 수 없지만 StringBuffer클래스는 변경이 가능하다. 내부적으로 문자열 편집을 위한 버퍼(buffer)를 가지고 있으며, StringBuffer인스턴스를 생성할 때 그 크기를 지정할 수 있다. 이 때,
Math클래스는 기본적인 수학계산에 유용한 메서드로 구성돼 있다. Math클래스의 생성자는 접근 제어자가 private이기 때문에 다른 클래스에서 인스턴스를 생성할 수 없도록 되어있다. 인스턴스변수가 하나도 없고 모두 static으로 된 메서드 밖에없으니 인스턴스를 생
객체 지향 개념에서는 모든 것이 객체로 다루어져야 하지만 자바에서는 8개의 기본형을 객체로 다루지 않는다. 그 대신 보다 높은 성능을 얻을 수 있다.때로는 기본형 변수도 어쩔 수 없이 객체로 다뤄야 하는 경우가 있다. 객체로 매개변수를 받거나 비교하거나 저장해야 할 때
이 클래스는 추상클래스이며 내부적으로 숫자를 멤버변수로 갖는 래퍼 클래스들의 조상이다.상속 계층도를 보면 기본형 중에서 숫자와 관련된 래퍼 클래스들은 모두 Number클래스의 자손이라는 것을 알 수 있다.그 외에도 BigInteger, BigDecimal이 있는데 이는
java 5 이전에는 기본형과 참조형 간의 연산이 불가능 했었기에 래퍼 클래스로 기본형을 객체로 만들어 연산해야 했었다.jdk 5 이상 부터는 기본형과 참조형 간의 덧셈이 일어날 때 컴파일러가 아래와 같이 코드를 추가해 주는 방식으로 바뀌었다.이 외에도 내부적으로 객체
Date클래스는 jdk1 부터 존재했지만 매우 부족한 구성으로 1.1부터 Calendar클래스를, jdk 8이상 부터는 java.time패키지로 기존의 단점들을 개선한 새로운 클래스들을 사용할 수 있게 됐다. Calendar 클래스 Calendar는 추상클래스이므로
성적 처리 프로그램을 작성할 때 각 점수의 평균을 소수점 2자리로 맞추기 위해 평균값에 100을 곱하고 int형으로 변환한 후 100f로 나누고 반올림을 위해 Math.round()도 사용하고..날짜를 형식에 맞게 출력하려 Calendar를 이용하여 년, 월, 일, 시
Date와 Calendar만으로 날짜 데이터를 가져오려면 년,월,일,시,분,초를 다 가져와야 해서 굉장히 불편하다. 이럴 때 SimpleDateFormat을 주로 사용한다.DateFormat은 추상클래스이며 SimpleDateFormat의 조상이다. DateFormat
컬렉션이란? '데이터 군을 저장하는 클래스들을 표준화한 설계'를 뜻한다.컬렉션 = 다수의 데이터, 데이터 그룹프레임워크 = 표준화된 프로그래밍 방식Java API문서에서는 '데이터 그룹을 다루고 표현하기 위한 단일화된 구조'라고 정의.JDK1.2 이전까지는 Vector
ArrayList는 컬렉션에서 가장 많이 사용되는 클래스일 것이다. 이름에서 알 수 있듯 List인터페이스를 구현하여 데이터의 저장순서를 유지하고 중복을 허용한다.ArrayList는 기존의 Vector를 개선한 것으로 구현원리, 기능적인면 모두 같다고 할 수있다. 지금
Queue같은 인터페이스를 구현해 놓은 클래스를 찾고싶다고 가정하자. 이럴때는 Java API문서를 참고하면 된다. 해당 인터페이스를 들어가면 'All Known Implementing Classes'라는 항목에서 나열된 클래스들이 해당 인터페이스를 구현한 클래스이다.
스택(Stack)과 큐(Queue) 스택은 마지막에 저장한 데이터를 가장 먼저 꺼내게 되는 LIFO(Last In First Out)구조로 되어 있고, 큐는 처음에 저장한 데이터를 가장 먼저 꺼내게 되는 FIFO(First In First Out)구조로 되어 있다. 스
Iterator, ListIterator, Enumeration은 모두 컬렉션에 저장된 요소를 접근하는데 사용되는 인터페이스이다. Enumeration은 Iterator의 구버젼이며, ListIterator는 Iterator의 기능을 향상시킨 것이다. >Iterato
Arrays클래스에는 여러가지 static으로 정의 된 메서드들이 있다(메서드들 모두 static임).반환타입이 기본형8개와 참조형1개(Object)로 오버로딩 돼 있는 toString()메서드가 존재한다.copyOf()는 배열 전체를, copyOfRange()는 배열
Comparator와 Comparable은 인터페이스로 컬렉션을 정렬하는데 필요한 메서드를 정의하고 있다. Comparable을 구현하고 있는 클래스들은 같은 타입의 인스턴스끼리 서로 비교할 수 있는 클래스들, 주로 Integer와 같은 wrapper클래스와 STri
HashSet은 Set인터페이스를 구현한 대표적인 컬렉션이고 Set인터페이스의 특징대로 중복된 요소를 저장하지 않는다. HashSet에 새로운 요소를 추가할 때는 add(), addAll()메서드를 사용한다. 이 때 이미 저장된 내용을 또 다시 저장하려고 하면 fals
TreeSet은 이진 탐색 트리(binary search tree)라는 자료구조의 형태로 데이터를 저장하는 컬렉션 클래스이다. 이진 탐색 트리는 정렬, 검색, 범위검색에 높은 성능을 보이며 TreeSet은 이진 탐색 트리의 성능을 향상시칸 '레드-블랙 트리'로 구현돼
Hashtable과 HashMap의 관계는 Vector와 ArrayList의 관계처럼 구 / 신버전의 차이라고 보면 되기에 필요한 경우가 아니라면 HashMap을 사용하면 된다.Hashtable은 키나 값으로 null이 허용되지 않지만, HashMap은 허용한다. 그래
Arrays가 배열과 관련된 메서드를 제공하는 것처럼, Collections는 컬렉션과 관련된 메서드를 제공한다. fill(), copy(), sort(), binarySearch() 등의 메서드는 두 클래스에 모두 포함돼 있으며 같은 기능을한다.멀티 쓰레드(multi
제네릭이란? 다양한 타입의 객체들을 다루는 메서드나 컬렉션 클래스에 컴파일 시의 타입체크(compile-time type check)를 해주는 기능이다. 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움이 줄어든다.보통의 Arra
Iterator의 소스↓HashMap처럼 데이터를 키-값 쌍으로 저장하는 컬렉션 클래스는 지정해야 하는 타입이 두개이다.만약 키의 타입이 String이고 저장할 타입이 Student라면 아래와 같이 생성한다.이렇게 HashMap을 만들었다면 아래와 같이 작동한다고 보면
여러 상수를 선언해야 할 떄, 편리하게 선언할 수 있는 방법을 열거형(enum)이라고 한다.위 처럼 많은 상수를 아래처럼 enum을 사용하면 자동으로 0,1,2,3... 식으로 값까지 부여해 준다.※ 참고로 C에서는 열거형의 값만을 비교하지만 JAVA에서는 해당 열거형
어노테이션이란? 주석처럼 프로그래밍 언어에 영향을 미치지 않으며, 유용한 정보를 제공 다음은 모든 어노테이션의 조상인 Annotation인터페이스의 소스코드의 일부이다. 자바를 개발한 사람들은 소스코드에 대한 문서를 따로 만들기보다 소스코드와 문서를 하나의 파일로
프로세스(process)는 간단히 말해 '실행 중인 프로그램'이다. 프로그램을 실행하면 OS로부터 실행에 필요한 자원을 할당받아 프로세스가 된다. 프로세스는 프로그램을 수행하는 데 필요한 데이터와 메모리 등의 자원 그리고 쓰레드로 구성돼 있으며, 프로세스의 자원을 이
쓰레드의 실행제어 쓰레드의 실행을 제어할 수 있는 메서드가 제공된다. 이 들을 활용해서 보다 효율적인 프로그램을 작성할 수 있다. 쓰레드 프로그래밍이 어려운 이유는 동기화와 스케줄링을 잘 관리해야 하기 때문이다. 우선순위를 통해 쓰레드간의 스케줄링을 희망할 수는 있
람다식은 간단히 말해 메서드를 하나의 '식(expression)'으로 표현한 것이다. 람다식은 함수를 간략하면서도 명확하게 표현할 수 있게 해준다. 자바는 객체지향 언어이지만 JDK1.8부터 함수형 언어를 포함시켰다. 파이썬과 자바스크립트들도 객체지향 언어지만 함수형
대부분의 메서드는 타입이 비슷하다. 매개변수가 없거나 한두개, 반환 값은 없거나 한개, 제네릭 메서드로 정의하면 매개변수나 반환 타입도 달라도 된다. 그래서 java.util.function패키지에 일반적으로 자주 쓰이는 형식의 메서드를 함수형 인터페이스로 미리 정의해
JDK1.8버전 부터 람다식이 추가되며, Collection프레임 워크의 인터페이스에 다수의 디폴드 메서드가 추가되었다. 그 중 일부는 함수형 인터페이스를 사용한다.※ 와일드 카드는 너무 복잡해 지기에 생략됨.이름들만 봐도 어떤 메서드인지 알 수 있는데, Map인터페이
람다식이 하나의 메서드만 호출하는 경우에는 '메서드 참조'라는 방법을 사용하여 람다식을 더욱 간략히 할 수 있다. 예를 들어 문자열을 정수로 변한하는 람다식은 라애과 같이 작성한다.이 람다식을 메서드로 표현하면 아래와 같다.여기서 이 wrapper메서드는 사실상 하는일
스트림이란? 다양한 데이터소스를 표준화된 방법으로 다루기 위한 것이다.지금까지는 컬렉션이나 배열에 데이터를 담고 원하는 결과를 얻기 위해 for문과 Iterator를 이용해서 코드를 작성해왔다. 이 방식은 코드도 길어지고 재사용성도 떨어지는 방법이다. 따라서 JDK1.
스트림의 소스가 될 수 있는 대상은 배열, 컬렉션, 임의의 수 등 다양하며 이 다양한 소스들로부터 스트림을 생성하는 방법에 대해 배워보자.컬렉션의 최고 조상인 Collection에 stream()이 정의돼 있다. 따라서 자손인 List와 Set을 구현한 컬렉션 클래스들
Optional은 T타입의 객체를 감싸는 래퍼 클래스이다. 그래서 Optional타입의 객체에는 모든 타입의 객체를 담을 수 있다. 최종 연산의 결과를 그냥 반환하지 않고 Optional객체에 담아서 반환하면 반환된 결과가 null인지 매번 if문으로 체크하지 않고
스트림이 제공하는 다양한 연산을 이용하면 복잡한 작업들을 간단히 처리할 수 있다. 마치 데이터베이스에 SELECT문으로 쿼리문을 작성하는 것과 같은 느낌이다. ※ 스트림에 정의된 메서드 중에서 데이터 소스를 다루는 작업을 수행하는 것을 연산(operation)이라고
스트림(Stream) 자바에서 입출력을 수행하려면, 두 대상을 연결하고 데이터를 전송할 수 있는 스트림이 필요하다. 이 전글의 모든 스트림과 같은 용어를 쓰지만 다른 개념이다. ※ 스트림은 Tv와 DVD를 연결하는 입력선, 출력선등과 같은 역할을 한다. >스트림이란
표준 입출력은 콘솔을 통한 데이터 입력과 콘솔로의 데이터 출력을 의미한다. 자바에서는 표준 입출력을 위한 3가지 스트림, System.in, System.out, System.err를 제공한다.이 3가지 입출력스트림은 자바 어플리케이션이 실행되면 생성되고 종료되면 자동
파일은 가장 많이 사용되는 입출력 대상이다. 자바에서는 File클래스를 통해서 파일과 디렉토리를 다룰 수 있도록 하고 있다. 그래서 File인스턴스는 파일 일 수도 있고, 디렉토리일 수도 있다.File의 생성자와 경로에 대한 메서드이다책에 여러 예제들이 소개되어 있으니
직렬화란? 객체를 데이터 스트림으로 만드는 것을 뜻하는 용어이다. 객체에 저장된 데이터를 스트림에 쓰기(write)위해 연속적인(serial) 데이터로 변환하는 것을 의미한다. 반대로 스트림으로부터 데이터를 읽어서 객체를 만드는 것을 역직렬화(deserializatio
네트워킹이란? 두 대 이상의 컴퓨터를 케이블로 연결하여 네트워크를 구성하는 것을 말한다. 네트워킹 개념은 컴퓨터들을 서로 연결하여 데이터를 주고받거나 자원을 공우하고자 하는 노력에서 시작됐다.초기에는 네트워크라하면 몇 대의 컴퓨터로 소규모로 구성됐으나, 지금은 전 세계
소켓 프로그래밍이란? 소켓을 이용한 통신 프로그래밍을 뜻하는데, 소켓이란 프로세스 간의 통신에 사용되는 양쪽 끝단(endpoint)를 의미한다. 서로 멀리 떨어진 두 사람이 통신하기 위해서 전화기가 필요한 것 처럼, 프로세스간의 통신을 위해서는 그 무언가가 필요하고 그
자바 빈(JavaBean)은 원래 비주얼 툴에서 조작 가능한 컴포넌트를 말했다. 자바의 주력 개발 플랫폼이 웹 기반 엔터프라이즈 방식으로 바뀌면서 비주얼 컴포넌트로서 자바빈은 인기를 서서히 잃어갔지만, 자바빈의 몇 가지 코딩 관례는 JSP 빈, EJB와 같은 표준 기술
Arrays클래스내에 자료형에 상관없이 오버로딩 돼 있는 binarySearch()메서드가 존재한다. 이진 검색의 논리상 이미 정렬된 배열을 매개변수로 넣어줘야 한다. 그럼 알고리즘이 알아서 중앙값을 바꿔가며 평균 2/n의 속도로 배열에서 내가 원하는 값을 찾아준다.T
지연 초기화(Lazy Initialization)이란? 필드의 초기화 시점을 그 값이 처음 필요할 때까지 늦추는 기법이다. 이로 인해 값이 전혀 사용되지 않으면 초기화도 결코 일어나지 않기에 자원을 아낄 수 있다.자바에서 지연 초기화에 대한 글을 찾기가 어렵다. 유튜브