개발도생's Blog
[8Days] Study_Static&Constructor 본문
오늘은 'static' 키워드와 생성자(Constructor)에 대해서 공부해 봤다.
'static' 키워드란,
클래스를 정의할 때 'static 키워드'를 사용한 프로퍼티와 메서드는
해당 클래스의 인스턴스를 생성하지 않아도 접근할 수 있게 된다.
이러한 프로퍼티와 메서드를 정적 멤버(static member)라고 한다.
※예시
public class StaticClass {
public static int test = 10;
}
public class TestClass {
public static void main(String[] args) {
System.out.println(StaticTest.test);
}
}
조금 더 쉽게 표현해 본다면,
같은 타입의 여러 객체가 공유할 목적의 필드에서 사용한다.
프로그램이 시작(작동)할 때 정적 메모리 영역에 자동으로 할당되는 멤버에 적용되는 것이다.
정적 멤버의 특징으로는,
1. 'static' 키워드로 선언된 정적 프로퍼티는 인스턴스화된 객체에서는 접근할 수 없다.
2. 'static' 키워드로 선언된 정적 메서드는 인스턴스화된 객체에서도 접근할 수 있다.
3. 정적 메서드 내에서는 $this 의사 변수를 사용할 수 없다.
static 키워드 표현식
Class를 설계할 때 'static'을 사용하기 위해서,
1. 클래스의 멤버변수 중 모든 인스턴스에 공통된 값을 유지해야 하는 것이 있는지
살펴보고, 있으면 static을 붙여준다.
2. 작성한 메서드 중에서 인스턴스 변수를 사용하지 않는 메서드에 대해서 static을
붙일 것을 고려한다.
public class Static {
public static int test;
}
생성자(Constructor)란,
자바에서는 객체의 생성과 동시에 인스턴스 변수를 원하는 값으로
초기화할 수 있는 생성자(Constructor)라는 메서드를 제공한다.
모든 클래스는 생성자가 반드시 존재하며, 하나 이상을 가질 수 있다.
생성자의 특징으로는
1. 생성자의 이름은 클래스 이름과 동일해야 합니다.
2. 생성자는 클래스에 최소 1개는 있어야 하며, 생성자 코드가 없을 경우 컴파일러가 기본생성자를 자동으로 생성합니다.
(사용자가 확인할 수 없는 이유는 생략이 되어 있기 때문이다.)
3. 생성자는 반환값이 없지만, 반환 타입을 void형으로 선언하지 않는다.
4. 생성자는 초기화를 위한 데이터를 인수로 전달받을 수 있다.
5. 객체를 초기화하는 방법이 여러 개 존재할 경우에는 하나의 클래스가 여러 개의 생성자를 가질 수 있습니다.
즉, 생성자도 하나의 메서드이므로, 메서드 '오버로딩'이 가능하다는 의미입니다.
※오버로딩(Overloading)
→ 같은 이름의 메서드를 중복하여 정의하는 것을 의미한다.
→ 자바에서는 원래 한 클래스 내에 같은 이름의 메서드를 둘 이상 가질 수 없다.
→ 매개변수의 개수나 타입을 다르게 하면, 하나의 이름으로 메서드를 작성할 수 있다.
→ 메서드 오버로딩을 사용함으로써 메서드에 사용되는 이름을 절약할 수 있습니다.
생성자의 선언
기본 생성자
자바의 모든 클래스에는 하나 이상의 생성자가 정의되어 있어야 한다.
하지만 특별히 생성자를 정의하지 않고도 인스턴스를 생성할 수 있다.
이것은 자바 컴파일러가 기본 생성자(default constructor)라는 것을 기본적으로 제공해 주기 때문이다.
기본 생성자는 매개변수를 하나도 가지지 않으며, 아무런 명령어도 포함하고 있지 않다.
자바 컴파일러는 컴파일 시 클래스에 생성자가 하나도 정의되어 있지 않으면,
자동으로 다음과 같은 기본 생성자를 추가합니다.
public class Constructor {
public Constructor() {
}
}
매개변수가 있는 생성자 선언
매개변수를 가지는 생성자를 하나라도 정의했다면, 기본 생성자는 자동으로 추가되지 않는다.
따라서 매개변수를 가지는 생성자를 하나라도 선언했다면, 반드시 기본 생성자도 선언해줘야 한다.
public class Constructor {
public int num1;
public Constructor() {
}
// 매개변수가 있는 생성자
public Constructor(int num1) {
// 전달 받은 매개변수 값을 이용하여 초기화
this.num1 = num1;
}
}
Method Overloading
public class Constructor {
public int num1;
public int num2;
public int num3;
public int num4;
/*
* 오버로딩(Overloading)
* - 하나의 Class 내부에 동일한 Method를 여러 개 작성하는 기법
* • Method의 이름이 같아야 한다.
* • 매개변수의 개수가 다르던지, 매개변수의 타입이 달라야 한다.
*/
public Constructor(int num1) {
this.num1 = num1;
}
public Constructor(int num1, int num2) {
this(num1);
this.num2 = num2;
}
public Constructor(int num1, int num2, int num3) {
this(num1, num2);
this.num3 = num3;
}
public Constructor(int num1, int num2, int num3, int num4) {
this(num1, num2, num3);
this.num4 = num4;
}
}
'개발자의 일기 > Study' 카테고리의 다른 글
[10Days] Study_Inheritance (0) | 2023.03.28 |
---|---|
[9Days] Study_Method (0) | 2023.03.24 |
[7Days] Study_객체 지향 언어(Java) (0) | 2023.03.18 |
[6Days] Study_배열(Array) (0) | 2023.03.15 |
[5Days] Study_가위 바위 보! (2) | 2023.03.13 |