Life is Good

수콩이의 시선

Coding/JAVA

생성자 중복(Overloading), 다른 생성자 호출(this()), 지정예약어(static/ final/ static final)

Soocong 2022. 4. 4. 10:40
  • 생성자 중복

: 매개변수를 달리하는 생성자를 여러 개 선언하는 것

 

매개변수의 타입과 개수 그리고 선언된 순서가 똑같을 경우 매개변수 이름만 바꾼는 것은 생성자 오버로딩이 아니다. 

 

 

 

  • 다른 생성자 호출(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이 붙으면, 값을 변경할 수 없는 상수가 된다. 
지역변수