Class01(변수, 상수 및 타입, 주석, 연산자, 기타)
2022. 12. 22. ~ 2022. 12. 23. 수업내용 정리
변수, 상수 및 타입.. 주석.. 연산자.. 기타..
변수, 상수 및 타입
1. 변수(Variable)
- 변수(Variable)는 변할수 있는 수(값)를 의미한다.
[타입] [변수 이름];
혹은
[타입] [변수 이름] = [초기 값];
형태로 선언(Declare)할 수 있다.
- 명명법(Naming Convention)으로 카멜 케이스(Camel Case, 소문자로 시작하고, 단어간 구분을 대문자로 하는 명명법)를 사용해야 한다.
- 변수의 이름은 명사(Noun)이어야 하고(일반적으로 단수, 배열은 복수), 논리(Boolean)타입일 경우
is형용사
혹은is동명사
,동명사
이거나 3인칭 단수의 동사(Verb)인 것이 좋다. - 키워드(Keyword)를 이름으로 사용할 수 없다.
- 메서드 내에서, 동일하거나 보다 상위의 스코프(Scope)에서 이미 사용된 이름을 사용할 수 없다.
- 선언된 지역 변수의 값이 초기화되어 있지 않은 경우 값 대입을 제외한 그 어떤 접근도 할 수 없다. (값이 없는 상황)
- 선언된 멤버 변수의 값이 초기화되지 않은 경우 숫자(정수, 실수 전부)의 경우 0으로,
boolean
의 경우false
로,char
의 경우 빈 값으로 초기화가 이루어진다. - 지역 상수의 경우 선언과 동시에 값 초기화를 해줄 필요가 없지만, 멤버 상수의 경우 선언과 동시에 값 초기화가 이루어지지 않으면 안 된다.
1-1. 변수의 종류
- 지역 변수(Local Variable) : 메서드 내부에 만들어져 있는 변수를 의미한다. 메서드 실행 종료시 다시는 접근할 수 없는 변수들이고, 1회성이 강하다.
- 멤버 변수(Member Variable) : 클래스가 바로 가지고 있는 변수를 의미한다. 클래스 객체화시 해당 클래스에 대한 접근점이 사라지지 않는다면 영원히 존재하는 변수들이고, 지속성이 강하다.
- 매개 변수(Parameter) : 메서드를 정의할때 해당 메서드가 전달 인자로 받을 값의 변수 타입을 나열한 것이다.
1-2. 멤버 변수
- 멤버 변수(Member Variable)는 클래스가 직접 가지고 있는 변수로, 아래와 같이 선언할 수 있다.
[접근 제한자] [static]? [final]? [타입] [이름];
혹은
[접근 제한자] [static]? [final]? [타입] [이름] = [초기 값];
2. 상수(Constant)
- Java 언어에 상수는 엄밀히 얘기하면 존재하지 않고, 읽기 전용(Read-Only) 개념이다.
- 값이 어떠한 변수에 대입된 후 다시 변경될 수 없는 것들을 의미한다.
final [타입] [변수 이름];
혹은
final [타입] [변수 이름] = [초기 값];
형태로 선언(Declare)할 수 있다. 단, 멤버 상수(Member Constant)는 선언과 동시에 값 초기화가 이루어지거나 생성자(Constructor)를 통해 값을 대입해야만 한다.
3. 타입(Type)
3-1. 기초 타입(원시 타입, Primitive Type)
byte
: 정수(Byte) 타입으로, -128 부터 127 까지의 정수를 가질 수 있다.short
: 정수(Short Integer) 타입으로, -32,768 부터 32,767 까지의 정수를 가질 수 있다.int
: 정수(Integer) 타입으로, -2,147,483,648 부터 2,147,483,647 까지의 정수를 가질 수 있다.long
: 정수(Long Integer) 타입으로, -9,223,372,036,854,775,808 부터 9,223,372,036,854,775,807 까지의 정수를 가질 수 있다. 접미어(Suffix)로L
을 사용한다.boolean
: 논리(Boolean) 타입으로 참(true
)과 거짓(false
)만 그 값으로 가질 수 있다.char
: 문자(Character) 타입으로, 문자 한 개만 가질 수 있다. 단, 값을 가지지 않을 수 없다. 문자 표시를 위해 홑따옴표(‘) 특수 기호를 이용해야 한다.float
: 실수(Float) 타입으로, -1.40239846와 10의 45승의 곱 부터 3.40282347와 10의 38승의 곱 까지의 값을 가질 수 있다. 단, 메모리를 아끼기 위한 특수한 조치 때문에 소수점 끝자리가 유실되거나 이에 오류(Margin Error)가 발생할 수 있어 잘 사용하지 않는다. 접미어로F
를 사용한다.double
: 실수(Double) 타입으로, -4.94065645841246544와 10의 324승의 곱 부터 1.79769313486231570와 10의 308승의 곱 까지의 값을 가질 수 있다. 마찬가지로 오류가 발생할 수 있지만 미미함으로 대부분의 경우에는 무시하고 사용한다. 접미어로D
를 사용하거나 생략한다.
3-2. 참조 타입(Reference Type)
String
: 문자열(String) 타입으로, 문자 여러개를 가질 수 있다. 문자열 표시를 위해 쌍따옴표(“) 특수 기호를 이용해야 한다.
4. 배열(Array)
- 배열은 어떠한 동일한 타입에 대해 하나의 변수에 여러개의 값(객체)을 가지게 하기위해 사용한다.
- 배열이 가지는 각 인자는 번호를 가지며 그 번호는 반드시 0 부터 시작한다.
- 배열의 타입으로 사용하고자 하는 타입 뒤에 대괄호(
[]
)를 붙여 이가 어떠한 타입에 대한 배열임을 알린다. - 배열의 초기화는 길이 초기화 혹은 인자 초기화 두 방식 중 하나를 이용해야 하며 두 방식을 동시에 이용할 수 없다.
- 배열은 한번 초기화되었을 때 그 길이가 지정되고 다시 초기화하지 않는 이상 그 길이를 줄이거나 늘릴수 없다.
T[] ts;
위와 같이 선언하고 가령 정수 배열을 선언하고자 할때는 아래와 같이 선언한다.
int[] numbers;
int[]
타입은 정수가 아닌 정수 배열로,numbers
변수는 정수 여러개를 가질 수 있다.4-1. 길이 초기화
- 배열의 길이를 지정하여 초기화하는 방식으로, 이 배열이 가질 수 있는 인자의 개수를 지정하는 방식이다.
T[] ts = new T[x];
위 코드에서 변수
ts
는T
타입의 값(객체)를x
개 만큼 가질 수 있다는 의미이다.int[] numbers = new int[10];
위 코드에서 변수
numbers
는 10개의 정수를 가질 수 있는 배열 임을 의미한다.4-2. 인자(요소) 초기화
- 배열의 길이를 지정하지 않고 초기화시 배열이 가지는 인자를 직접 전달하는 방식이다. 인자를 직접 전달할 때에는 길이를 명시하지 않음에 유의한다.
T[] ts = new T[] {a, b, c, ...};
위 코드에서 변수
ts
는T
타입의 값(객체)인a
,b
및c
를 가지는T
타입의 배열이다.int[] odds = new int[] {1, 3, 5, 7, 9};
위 코드에서 변수
odds
는1
,3
,5
,7
및9
총 다섯개의 인자를 가지는 정수형 배열이다. 마찬 가지로 위 코드는 아래와 같이 간략하게 작성할 수 있다.int[] odds = {1, 3, 5, 7, 9};
4-3. 요소 접근
- 어떠한 배열이 가지고 있는 요소에 접근할때에는 배열 요소 연산자를 사용하여 접근하고자 하는 요소의 번호(인덱스)를 제공하여 접근할 수 있다.
T[] ts = new T[] {a, b, c};
위 코드에서
b
요소에 접근하기 위해서는 아래와 같이 작성한다.ts[1]
주의할 점은 배열의 요소가 가지는 번호는 항상
0
번 부터 시작함으로 위와 같이 두 번째 요소에 접근하기 위한 번호는1
번이 된다.4-4. 길이 속성
length
- 어떠한 배열이 가지고 있는 요소들의 개수인 속성이다.
T[] ts = new T[10]; System.out.println( ts.length ); // 10
- 위와 같이 어떠한 배열의
length
속성은 이 배열이 가지고 있는 요소의 개수를 의미함으로 어떠한 배열이 가지고 있는 마지막 요소의 번호(인덱스)는 항상 어떠한 배열의length
값에서1
을 뺀 값이다.
주석
- 주석(Comment)은 코드 내에서 설명을 적기 위해 사용한다.
- 한 줄 주석은
//
로 작성한다. - 여러 줄 주석은
/*
로 시작하고*/
로 끝낸다.// 한 줄 주석 /* 여러 줄 주석 */
- 주석은 코드 실행이나 성능에 영향을 미치지 않음으로 필요시 적절히 작성한다.
연산자
- 연산자(Operator)는 하나 이상의 값(들)을 연산하기 위해 사용한다.
- 아래 우선 순위(숫자가 낮을 수록 높은 우선 순위)에 따라 차례로 연산된다.
- 동일한 타입끼리 연산이 가능하며, 두 피연산자의 타입이 다를 경우 자동 형변환이 가능한 경우에만 연산할 수 있다.
- 괄호
(, )
로 특정 연산을 묶어낼 경우 우선 순위를 무시하고 우선 연산한다. - 배열 요소 연산자
[]
: 배열 요소 연산자[]
는a[x]
꼴에서a
배열의x
번째 요소이다. - 객체 멤버 연산자
.
: 객체 멤버 연산자.
은a.b
꼴에서a
객체의 멤버b
에 접근한 것이다. - 전위 증가 연산자
++
: 증가 연산자++
는++a
꼴에서a
에 1을 더한다. 단, 전위 증가 연산자는 해당 구문이 실행되기 전 연산을 마친다. - 전위 감소 연산자
--
: 감소 연산자--
는--a
꼴에서a
에 1을 뺀다. 단, 전위 감소 연산자는 해당 구문이 실행되기 전 연산을 마친다. - 후위 증가 연산자
++
: 증가 연산자++
는a++
꼴에서a
에 1을 더한다. 단, 후위 증가 연산자는 해당 구문의 실행이 끝난 뒤 연산한다. - 후위 감소 연산자
--
: 감소 연산자--
는a--
꼴에서a
에 1을 뺀다. 단, 후위 감소 연산자는 해당 구문의 실행이 끝난 뒤 연산한다. - 양의 부호 연산자
+
: 부호 연산자+
는+a
꼴에서a
를 양수인 것으로 한다. - 음의 부호 연산자
-
: 부호 연산자-
는-a
꼴에서a
를 음수인 것으로 한다. 단,a
가 음수인 경우 양수로 한다. - 논리 부정(반전) 연산자
!
: 논리 부정 연산자!
는!a
꼴에서a
를 부정(반전)한다. - 객체 생성 연산자
new
: 객체 생성 연산자new
는new T
꼴에서T
타입을 객체화한 객체이다. - 형 변환 연산자
(T)
: 형 변환 연산자(T)
는(T) a
꼴에서a
의 타입을T
로 변환한다. - 곱하기 산술 연산자
*
: 산술 연산자*
는a * b
꼴에서a
와b
를 곱한 값이다. - 나누기 산술 연산자
/
: 산술 연산자/
는a / b
꼴에서a
를b
로 나눈 몫이다. - 나머지 산술 연산자
%
: 산술 연산자%
는a % b
꼴에서a
를b
로 나눈 나머지이다. (*
,/
및%
는 동률의 우선 순위를 가진다.) - 더하기 산술 연산자
+
: 산술 연산자+
는a + b
꼴에서a
와b
를 더한 값이다. 만약 피연산자 중 한 개 이상이 문자열(String
) 타입인 경우 문자열 합치기(String Concatenation)를 수행한다. 이는 문자열이 아닌 다른 어떠한 값을 문자열로 변환하여 문자열과 문자열을 이어 붙이는 것과 동일하다. - 빼기 산술 연산자
-
: 산술 연산자-
는a - b
꼴에서a
에서b
를 뺀 값이다. (+
와-
는 동률의 우선 순위를 가진다.) - 초과 비교 연산자
>
: 비교 연산자>
는a > b
꼴에서a
가b
보다 큰가에 대한 여부이다. - 미만 비교 연산자
<
: 비교 연산자<
는a < b
꼴에서a
가b
보다 작은가에 대한 여부이다. - 이상 비교 연산자
>=
: 비교 연산자>=
는a >= b
꼴에서a
가b
이상인가에 대한 여부이다. - 이하 비교 연산자
<=
: 비교 연산자<=
는a <= b
꼴에서a
가b
이하인가에 대한 여부이다. (>
,<
,>=
및<=
는 동률의 우선 순위를 가진다.) instanceof
연산자 :instanceof
연산자는a instanceof T
꼴에서 객체a
가T
타입으로 형변환 될 수 있는가의 여부이다.- 동등 비교 연산자
==
: 비교 연산자==
는a == b
꼴에서a
와b
의 (스택)값이 같은가에 대한 여부이다. - 부등 비교 연산자
!=
: 비교 연산자!=
는a != b
꼴에서a
와b
의 (스택)값이 다른가에 대한 여부이다. (==
및!=
는 동률의 우선 순위를 가진다.) - AND 논리 연산자
&&
: 논리 연산자&&
는a && b
꼴에서a
와b
가 모두 참(true
)인가에 대한 여부이다. - OR 논리 연산자
||
: 논리 연산자||
는a || b
꼴에서a
와b
중 하나 이상이 참(true
)인가에 대한 여부이다. - 삼항 연산자
... ? ... : ...
: 삼항 연산자... ? ... : ...
는a ? t : f
꼴에서a
가 참이면t
를, 거짓이면f
이다. - 대입 연산자
=
: 대입 연산자=
는a = b
꼴에서b
의 값을a
에 대입한다. - 더하기 복합 대입 연산자
+=
: 대입 연산자+=
은a += b
꼴에서a
에b
를 더한 뒤a
에 대입한다.a = a + b
꼴과 같다. - 빼기 복합 대입 연산자
-=
: 대입 연산자-=
은a -= b
꼴에서a
에서b
를 뺀 뒤a
에 대입한다.a = a - b
꼴과 같다. - 곱하기 복합 대입 연산자
*=
: 대입 연산자*=
은a *= b
꼴에서a
와b
를 곱한 뒤a
에 대입한다.a = a * b
꼴과 같다. - 나누기 복합 대입 연산자
/=
: 대입 연산자/=
은a /= b
꼴에서a
를b
로 나눈 몫을a
에 대입한다.a = a / b
꼴과 같다. - 나머지 복합 대입 연산자
%=
: 대입 연산자%=
은a %= b
꼴에서a
를b
로 나눈 나머지를a
에 대입한다.a = a % b
꼴과 같다. (=
,+=
,-=
,*=
,/=
및%=
는 동률의 우선 순위를 가진다.)
기타
명명법(Naming Convention)
- 카멜 케이스(Camel Case) : 소문자로 시작하고 단어간 구분을 대문자로 하는 명명법. 가령,
someMethod
,someVariable
,camelCase
등.Java에서 메서드, 매개 변수, 지역 변수, 멤버 변수의 이름에 사용된다.
- 파스칼 케이스(Pascal Case) : 대문자로 시작하고 단어간 구분을 대문자로 하는 명명법. 가령,
SomeClass
,SomeEnumeration
,PascalCase
등.Java에서 클래스, 열거형, 인터페이스, 어노테이션의 이름에 사용된다.
- 케밥 케이스(Kebab Case) : 전체 소문자이고 단어간 구분을 대쉬(-)로 하는 명명법. 가령,
some-class
,some-id
,some-attribute
등.Java에서 사용되지 않음.
- 스네이크 케이스(Snake Case) : 전체 소문자이고 단어간 구분을 언더스코어(_)로 하는 명명법. 가령,
some_name
,some_php
,some_thing
등.Java에서 사용되지 않음.
- 어퍼 스네이크 케이스(Upper Snake Case) : 전체 대문자이고 단어간 구분을 언더스코어(_)로 하는 명명법. 가령,
SOME_NAME
,SOME_THING
,SOME_CONST
등.Java에서 정적이고 읽기 전용인(
static final
) 멤버 변수, 열거형 인자의 이름에 사용된다. 단, 정적이고 읽기 전용인 대상 중 그 값이 리터럴(Literal)이지 않고 객체인 경우 카멜 케이스를 사용하기도 한다.
표현식(Expression)
- 어떠한 값이나 변수, 혹은 메서드의 호출 결과 간의 연산을 하는 것(코드 조각)을 의미한다.
- 구문에 포함되는 개념이다.
구문(Statement)
- 표현식(들)으로 이루어진 하나의 코드 실행 단위이다.
- 세미콜론(
;
)으로 끝내야만 한다.
블록(Block)
- 코드(들) 혹은 구문(들)의 집합이다.
- 중괄호(
{
및}
)로 감싼다.
패키지(Package)
- 클래스를 포함하는 구성요소 등이 존재하는 위치이다.
- 가령, 클래스
First
가a.b.c
라는 패키지 경로 아래에 있다면 해당 클래스의 풀 네임은a.b.c.First
가 된다. - 패키지는 실질적으로 디렉토리이며 각 디렉토리간의 구분을 마침표(
.
)로 한다. - 패키지 경로의 시작은 반드시 본인이 소유하고 있는 도메인의 역순이어야 한다. 가령,
mydomain.com
이라는 도메인을 소유하고 있다면 패키지의 시작은com.mydomain
이어야 한다. 전통적으로는 그 뒤에 프로젝트의 이름이 온다. - 패키지의 명명에는 카멜케이스 혹은 스네이크 케이스를 이용한다. 간혹 단어 구분 없이 전체 소문자로 작성하는 경우도 있음으로 회사의 방침에 따른다.
접근 제한자(Access Modifier)
- 접근 제한자(Access Modifier)는 어떠한 대상(클래스, 메서드 등)에 접근할 수 있는 주체를 제한하기 위해 사용한다.
public
: 해당 대상에 대한 접근에 제한이 없다. (아무나 어디서든 접근 가능)protected
: 같은 패키지 경로에 있거나, 상속 관계일때만 접근할 수 있다.(default)
: 같은 패키지 경로에 있을때만 접근할 수 있다. (실제로default
라고 적는 것이 아니라, 접근 제한자를 생략하면default
접근 제한자가 되는 것.)private
: 같은 객체(클래스 등) 내에서만 접근할 수 있다.
정적(Static) 및 비정적(Non-static)
- 어떠한 대상(주로 변수나 메서드)이 정적(
static
)일 경우 프로그램 실행과 동시에 해당 변수 및 메서드의 존재가 메모리에 등록되게 되고 존재하게 된다. - 정적인 대상은 스레드(Thread) 내에 하나만 존재한다.
- 정적인 대상에 접근할 때에는 객체(인스턴스)가 아닌 타입(변수 명 앞에 게시된)으로 접근해야 한다.
빈 값(널, null)
- 어떠한 변수의 타입이 참조타입일 때 해당 변수가 할당된 스택(Stack)이 힙(Heap) 주소를 가리키지 않고 값을 가지고 있지 않을 때 그 상태를
null
이라 한다. - 스택 값이
null
인 어떠한 참조 타입의 변수를 연산(할당,instanceof
제외)할 경우NullPointerException
예외가 발생하니 유의한다. - 기초 타입은
null
일 수 없다.(스택이 값을 바로 가짐으로) - 값을 가지지 않는 기초 타입의 지역 변수는
null
이 아님으로 유의한다.
리팩토링(Refactoring)
- 리팩토링(Refactoring)은 Java 언어 뿐만 아니라 모든 언어에서 참조(Referred)되는 대상의 이름을 변경하고, 이러한 변경 사항이 참조 중(Referring)인 컨텍스트에서도 동시에 변경되게 하고자 할 때 사용하는 기능이다. JetBrains에서 제작한 IDE는
Shift+F6
키 조합을 단축키로 사용하고 있다. 반면, Microsoft에서 제작한 IDE(가령 Virtual Strudio, Virtual Studio Code 등)는F2
키를 단축키로 사용하고 있다.
다형성(Polymorphism)
- 어떠한 A타입의 객체가 B타입의 변수에 대입될 수 있는 상황을 의미한다. 이 때 각 A와 B는 아래 상황 중 하나 이상이다.
- A타입이 B타입의 클래스를 상속받는 경우.(부모 타입의 변수는 자식 타입의 객체를 받을 수 있다.)
- A타입이 B타입의 인터페이스를 구현(Implement)하는 경우.
- 본래 객체화된 타입이 상속받는 부모 타입으로 형변환되었다 하더라도, 이 객체를 다시 자식 타입으로 강제 형변환할 수 있다.
Object o = new String("Hi!"); // String s = o; // 부모 타입의 객체를 자식 타입의 변수에 대입할 수 없다. (일반적으로) String s = (String) o;
Object o = new SimpleDateFormat("yyyy"); String s = (String) o; // 단, 부모 타입의 변수에 할당된 객체의 원래 타입(`SimpleDateTime`)과 관련 없는 타입(`String`)으로의 형변환은 불가능하다. // `instanceOf` 연산을 사용하여 안전하게 강제 형변환이 가능한지 항시 확인해야 한다.
어노테이션(Annotation)
- 어노테이션(Annotation)은 앳(At,@) 기호를 사용하여 표시한다.
- 어노테이션은 해당 어노테이션 뒤에 오는 대상(클래스, 인터페이스, 메서드, 변수 등등)에 대한 부수적인 힌트(정보)를 부여하고자할 때 사용한다.
@Override
: 해당 메서드가 재정의되었음을 알린다.@Deperecated
: 해당 대상이 추 후에 출시될 버전에서 삭제될 수 있음으로 더 이상 사용되어서는 안 된다는 알린다.
반복자(Iterator)
- 어떠한
Collection
객체가 가진 인자를 반복(Iteration)하고자 할 때 사용한다. 일반적인 경우는for
등의 반복문을 사용하면 되나, 반복 중 인자를 제거(Remove)하는 로직이 있다면 반복자를 사용하는 것이 좋다. (인덱스가 있는 경우 역순for
를 사용해도 무방함.)
Stream API
- Stream API 배열(Array)이나 리스트(List)의 사용을 보다 쉽게(?) 해준다.
Stream<T>
형식으로 사용하여 이 객체는T
타입의 인자들에 대한 여러 기능을 가지고 있다.Stream<T>
타입의 객체가 가진 여러 메서드는Predicate<? super T>
타입의 객체를 매개변수로 받는데 이는 함수 인터페이스로, 전달 받은 매개변수에 대해 논리값(boolean
)으로 반환토록 하는 구성요소이다.(인자) > {(함수)}
형식이며 함수의 첫 구분이 논리값에 대한return
이라면(인자) -> [표현식]
형식으로 작성한다. 이를 람다(Lamda)라고 부르기도 한다.- 객체 메서드
<T>allMatch(Predicate<? super T> p)
:Stream<T>
객체가 가진 인자 전체가 주어진 함수 인터페이스p
를 만족하는가에 대한 여부(boolean
)를 반환한다.<T>anyMatch(Predicate<? super T> p)
:Stream<T>
객체가 가진 인자 중 하나 이상이 주어진 함수 인터페이스p
를 만족하는가에 대한 여부(boolean
)를 반환한다.<T>noneMatch(Predicate<? super T> p)
:Stream<T>
객체가 가진 인자 전체가 주어진 함수 인터페이스p
를 만족하지 않는가에 대한 여부(boolean
)를 반환한다.<T>distinct()
:Stream<T>
객체가 가진 인자 중복되는 인자를 하나로 합친 새로운Stream<T>
를 반환한다. 이때 인자가 기초 타입이변==
비교를, 참조 타입이면equals()
호출을 통해 같은가에 대한 여부를 가린다.<T>filter(Predicate<? super T> p)
:Stream<T>
객체가 가진 인자 중 주어진 함수 인터페이스p
의 조건을 만족하는 인자만을 가지는 새로운Stream<T>
객체를 반환한다.<T>forEach(Consumer<? super T> c)
:Stream<T>
객체가 가진 인자에 대해c
함수를 반복하여 호출한다. 반환 값이 없음에 유의한다.<T>map(Function<? super T, ? extends R> m)
: 객체가 가진T
타입의 인자에 대해 주어진 함수m
을 적용한 새로운Stream<T>
를 반환한다.sorted()
:Stream<T>
객체가 가진 인자를 오름 차순 정렬하여 새로운Stream<T>
객체로 반환한다.toArray()
:Stream<T>
객체가 가진 인자를Object[]
타입으로 반환한다.toArray(T[]::new)
:Stream<T>
객체가 가진 인자를T[]
타입으로 반환한다.T::m
형식은 메서드 참조(Method Reference)라고 하며, 어떠한 인자(들)에 대해 실행할 메서드가 단 하나일 때 사용할 수 있다.T[]:: new
에서new
는 메서드는 아니지만 객체화를 위한 생성자 호출과 동일하다고 생각할 수 있다. 마찬가지로 인자의 구조와 참조되는 메서드의 매개변수 구조가 같아야 하며, 이에 변수 전달은 생략한다.
skip(int n)
: 호출 대상이 되는Stream
객체가 가진 인자 중 앞n
개를 버린 새로운Stream
객체를 돌려준다.limit(int n)
: 호출 대상이 되는Stream
객체가 가진 인자 중 앞n
개만 인자로 가지는Stream
객체를 돌려준다.
댓글남기기