- 생성자 중복
: 매개변수를 달리하는 생성자를 여러 개 선언하는 것
매개변수의 타입과 개수 그리고 선언된 순서가 똑같을 경우 매개변수 이름만 바꾼는 것은 생성자 오버로딩이 아니다.
- 다른 생성자 호출(this())
: 생성자에서 다른 생성자를 호출할때는 this() 를 사용한다.
생성자 오버로딩이 많아질 경우 생성자 간의 중복된 코드가 발생할 수 있다. 매개 변수의 수만 달리하고 필드 초기화 내용이 비슷한 생성자에서 이러한 현상을 볼 수 있다. 이 경우에는 필드 초기화 내용은 한 생성자에만 집중적으로 작성하고 나머지 생성자는 초기화 내용을 가지고 있는 생성자를 호출하는 방법으로 개선할 수 있다. 중복 코드를 최소화한다.
조건 1) 반드시 생성자의 첫 줄에서만 허용된다. 2) 생성자의 이름으로 클래스이름 대신 this를 사용한다.
- static
static함수는 static만 가져다 쓴다. static 함수는 변수이던 함수이던 외부에서 가져오는 건 무조건 static만!
setCount()함수가 몇번 호출되었는지 알고 싶은데, new키워드로 객체가 생성될때마다 초기화되기 때문에 1이 출력.
static 변수로 선언해서 1, 2, 3이 출력되는 것을 볼 수 있다.
static은 프로그램이 종료될 때까지 살아있다. 남용하면 메모리공간을 많이 차지하게되므로 주의해야한다.
접근제한(private, public) / 지정예약어(static, final, static final)
지정예약어는 (default(없는거), static, final, static final)로 4가지로 구성한다.
static함수는 static변수만 사용가능. 클래스를 이용해서 접근해야한다. (함수호출은 클래스명으로 접근한다.)
<클래스다이어그램(Class Diagram)>
- public : +
- private : -
- (함수명)(변수명 : 자료형)
- static : 밑줄(함수 변수 둘다 사용)
API 문서 자주 보기!!
공식 문서 잘 찾아서 쓸 줄 알아야한다.
https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/io/PrintStream.html
PrintStream (Java SE 14 & JDK 14)
All Implemented Interfaces: Closeable, Flushable, Appendable, AutoCloseable Direct Known Subclasses: LogStream public class PrintStream extends FilterOutputStream implements Appendable, Closeable A PrintStream adds functionality to another output stream, n
docs.oracle.com
https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/util/Scanner.html
Scanner (Java SE 14 & JDK 14)
All Implemented Interfaces: Closeable, AutoCloseable, Iterator public final class Scanner extends Object implements Iterator , Closeable A simple text scanner which can parse primitive types and strings using regular expressions. A Scanner breaks its input
docs.oracle.com
- final
final필드는 초기값이 저장되면 이것이 최종적인 값이 되어서 프로그램 실행 도중에 수정이 안된다.
즉, 기본개념은 값이 치환하지 않는다. 지역변수로 선언은 가능하다.
final 은 값을 받을 수는 있지만, 전달해주지 못한다.
<클래스 다이어그램>
- final: {readOnly}
- static final
상수(불변의 값) 한 번 초기값이 저장되면 변경할 수 없다.
static함수에서 final 변수 사용 안된다. 쓸 수 있으려면 static final를 사용한다.
[정리]
- 생성자 중복은 매개변수의 개수나 타입이 다르면 사용가능하다.
- 생성자 간에 호출할 시에는 this() 를 사용한다.
- static 함수 내에서는 static 변수만 쓴다. (static(o), static final(o), final(x), default(x))
- final은 변하지 않는 값일 때 사용한다.
static 이 사용될 수 있는 곳 - 멤버변수, 메서드, 초기화 블럭
제어자 | 대상 | 의미 |
static | 멤버변수 | - 모든 인스턴스에 공통적으로 사용되는 클래스변수가 된다. - 클래스변수는 인스턴스를 생성하지 않고도 사용 가능하다. - 클래스가 메모리에 로드될 때 생성된다. |
메서드 | - 인스턴스를 생성하지 않고도 호출이 가능한 static메서드가 된다. - static 메서드 내에서는 인스턴스멤버들을 직접 사용할 수 없다. |
final 이 사용될 수 있는 곳 - 클래스, 메서드, 멤버변수, 지역변수
변수에 사용되면 값을 변경할 수 없는 상수가 되며, 메소드에 사용되면 오버라이딩을 할 수 없게 되고 클래스에 사용되게 되면 자신을 확장하는 자손클래스를 정의하지 못하게 된다.
제어자 | 대상 | 의미 |
final | 클래스 | 변경될 수 없는 클래스, 확장될 수 없는 클래스가 된다. 그래서 final로 지정된 클래스는 다른 클래스의 조상이 될 수 없다. |
메서드 | 변경될 수 없는 메서드, final로 지정된 메서드는 오버라이딩을 통해 재정의 될 수 없다. | |
멤버변수 | 변수앞에 final이 붙으면, 값을 변경할 수 없는 상수가 된다. | |
지역변수 |
'Coding > JAVA' 카테고리의 다른 글
인터페이스(interface), 접근제한자(public, private, protected, default) (0) | 2022.04.04 |
---|---|
상속(inheritance) / 메소드 재정의(오버라이딩 Overriding) (0) | 2022.04.04 |
함수 중복(오버로딩 Overloading)&(오버라이딩 Overriding), 객체 배열 (0) | 2022.04.04 |
접근제한자(public, private) / 생성자 (0) | 2022.04.04 |
배열(Array)과 클래스(Class) (0) | 2022.04.04 |