Java-객체지향 프로그래밍 기초-2
생성자
생성자란 무엇인가? 생성자는 한마디로 클래스 내부에서 객체가 생성될때 호출 되어 객체를 초기화 해주는 메서드라고 볼수 있다.
생성자의 구조는 아래와 같다.
클래스명(매개변수){
///
}
생성자는 일반적인 메서드와 비슷한 구조를 가지고 있지만 두 가지의 특징이 존재한다.
첫 번째는 생성자 이름은 반드시 클래스의 이름과 같아야한다.
두 번째는 생성자는 리턴 타입이 없다.
위의 두가지 특징에 유의해서 생성자에 대해 계속 알아보자.
public class Main {
public static void main(String[] args) {
Constructor constructor1 = new Constructor();
Constructor constructor2 = new Constructor("String");
Constructor constructor3 = new Constructor(10);
}
}
class Constructor{
Constructor(){
System.out.println("나 매개변수 없음~!");
}
Constructor(String s){
System.out.println("나 매개변수 String");
}
Constructor(int i){
System.out.println("나 매개변수 int");
}
}
//출력
//나 매개변수 없음~!
//나 매개변수 Stirng
//나 매개변수 int
위와같이 생성자는 메서드의 한 종류로써 오버로딩이 가능하다.
자 그렇다면, 생성자가 왜 필요할까?? 위에서 설명한 것처럼 생성자는 객체를 생성할때 내부의 필드를 초기화 해줄 수 있다.
public class Main {
public static void main(String[] args) {
Human human1 = new Human();
Human human2 = new Human("홍길동");
Human human3 = new Human("홍길동",30);
Human human4 = new Human("홍길동",30,177);
Human human5 = new Human("홍길동",30,177,"홍당무");
}
}
class Human{
private String name;
private int age;
private int height;
private String nickname;
public Human(){
}
public Human(String name){
this.name = name;
}
public Human(String name, int age){
this.name = name;
this.age = age;
}
public Human(String name, int age, int height){
this.name = name;
this.age = age;
this.height = height;
}
public Human(String name, int age, int height, String nickname){
this.name = name;
this.age = age;
this.height = height;
this.nickname = nickname;
}
}
위의 코드를 한번 살펴보자. Human이란 클래스에는 5개의 생성자가 있고, Main클래스에는 human1~5까지 5개의 객체가 생성되어있다.
- human1은 객체가 가진 name, age, height, nickname값이 모두 Null또는 0이다.
- human2는 name 값을 제외 하고 모두 Null 또는 0이다.
- human3는 name,age 값을 제외 하고 모두 Null 또는 0이다.
- human4는 name,age,height 값을 제외 하고 모두 Null이다.
- human5는 모든 속성이 초기화 되었다.
만약 human1~4는 가지고 있는 속성값을 초기화해주려면 human1.name = “이름” 혹은 Setter메서드를 통하여 초기화 혹은 정의 해주어야 한다.
그리고 만약 class내부에 생성자가 선언이 되어있지 않다면, 아래와 같이 Java에서는 매개변수가 없는 기본 생성자를 정의해준다.
class Human{
private String name;
private int age;
private int height;
private String nickname;
public Human(){ //만약 생성자 선언을 안해주면 이처럼 기본 생성자를 만들어줌 -> 하지만 코드로 보여지진 않음
}
}
this 키워드
생성자를 만들때 this
라는 키워드가 갑자기 나와서 당황했을 수도 있다.
여기서 this
는 일반적으로 생성자를 생성할때는 생성자 매개변수의 값과 클래스 필드 값을 동일하게 지정한다.
그때 this
키워드를 사용하며, this.필드값 = 매개변수
로 구분하는 것이다. :)
이너 클래스(Inner Class)
이너 클래스는 말 그대로 클래스 안에 있는 클래스를 이너 클래스라고 한다.
class Out {
private String outString;
private int outNum = 6;
class In {
String inString;
int inNum;
}
void innerClassMethod() {
int inNum2 = 5;
class MethodInClass {
void test() {
System.out.println(outNum);
System.out.println(inNum2);
}
}
MethodInClass methodInClass = new MethodInClass();
methodInClass.test();
}
}
public class Main {
public static void main(String[] args) {
Out out = new Out();
out.innerClassMethod();
}
}
//출력 6
//출력 5
과 같이 클래스 내부에 또 다른 클래스를 정의하고 사용할 수 있다.
또한 클래스 내부에 선언된 innerClassMethod
와 같은 메소드 내부에도 클래스를 생성하고 사용할 수 있다.
끝으로
Java에서 객체지향 4개 요소를 학습하기 전에, 전체적인 기초들을 정리해보았다.
물론 static
키워드나, 생략된 부분이 많지만 너무 상세히 적는 것 보다는 전체적인 흐름만 우선 정리해두고
후에 다시 부족한 부분을 보완하는 블로깅을 진행하려 한다.:)