(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)

 

생성자(Constructor)란 딱 한 번만 호출되어 멤버 변수의 초기화를 목적으로 사용되는 메소드이다. 생성자의 이름은 클래스 이름과 같고, 반환형이 없다. 또한 클래스에는 반드시 하나 이상의 생성자가 필요하다.

 

■ 디폴트 생성자

- 아무런 생성자도 만들지 않으면 컴파일러에서 컴파일 시 자동으로 생성자를 만들어주는데, 이를 디폴트 생성자라고 한다. 디폴트 생성자는 아무런 매개변수도 갖지 않고, 안에 어떠한 코드도 존재하지 않는다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Customer {
    String name;
    int money;
    
    //public Customer() {}
}
 
public class Main {
    public static void main(String[] args) {
        Customer c1 = new Customer(); // 디폴트 생성자를 통한 인스턴스 생성
        c1.name = "무민";
        c1.money = 2000;
    }
}
cs

Line 5 : 어떠한 생성자도 만들어주지 않으면, 디폴드 생성자가 컴파일 시 자동으로 만들어진다.

 

■ 생성자 만들기

- 인스턴스를 초기화하기 위해 사용자가 직접 생성자를 만들 수 있다. 사용자가 아무런 생성자도 만들지 않는 경우에 디폴트 생성자가 만들어졌지만, 사용자가 생성자를 만드는 순간 디폴트 생성자는 자동으로 생성되지 않는다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Customer {
    String name;
    int money;
    
    //public Customer() {}
    public Customer(String n, int m) {
        this.name = n;
        this.money = m;
    }
}
 
public class Main {
    public static void main(String[] args) {
        Customer c1 = new Customer("무민"2000);
        Customer c2 = new Customer(); // 에러 발생
    }
}
cs

Line 6 ~ 9 : name과 money를 초기화시켜주는 생성자

Line 14 : 사용자가 만든 생성자를 통한 인스턴스 생성

Line 15 : 생성자를 만든 경우 디폴트 생성자가 자동으로 생기지 않으므로 에러 발생

            (이 경우 Line 5의 주석을 해제하여 디폴트 생성자를 직접 만들어줘야 한다.)

 

■ 오버로딩(Overloading)

- 생성자처럼 동일한 이름의 메소드를 여러 개 생성하는 것을 오버로딩이라고 한다. 매개변수의 개수를 다르게 하거나, 매개변수의 타입을 다르게 하여 동일한 이름의 메소드를 여러 개 생성하여 사용할 수 있다. 호출 시 매개변수를 비교하여 매개변수와 일치하는 메소드가 호출된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Customer {
    String name;
    int money;
    
    public Customer() {
        System.out.println("constructor 1");
    }
    public Customer(String n) {
        System.out.println("constructor 2");
        this.name = n;
    }
    public Customer(String n, int m) {
        System.out.println("constructor 3");
        this.name = n;
        this.money = m;
    }
}
 
public class Main {
    public static void main(String[] args) {
        Customer c1 = new Customer("무민"); // constructor 2
    }
}
cs

Line 5 ~ 7 : 디폴트 생성자

Line 8 ~ 11 : name을 초기화 시키는 생성자

Line 12 ~ 16 : name, money를 초기화 시키는 생성자

Line 21 : 파라미터로 name만 전달하여 constructor 2에 해당하는 생성자 실행

(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)

 

객체란 물건 또는 대상을 의미하며, 이를 코드로 구현한 것이 클래스이다. 그리고 클래스를 메모리 공간에 생성한 상태를 인스턴스라고 한다. 쉽게 말해 클래스가 붕어빵 틀이라면 인스턴스는 붕어빵 틀을 통해 찍어내는 붕어빵이라고 할 수 있다.

 

■ 인스턴스(Instance) 생성

- 인스턴스는 new 예약어를 이용하여 생성할 수 있다. 하나의 클래스 타입으로 여러개의 인스턴스를 생성 가능하다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Customer {
    String name;
    int money;
        
    public void customerInfo() {
        System.out.println("이름 : " + name + ", 가진돈 : " + money);
    }
}
 
public class Main {
    public static void main(String[] args) {
        Customer c1 = new Customer();
        c1.name = "무민";
        c1.money = 2000;
        
        Customer c2 = new Customer();
        c2.name = "마루코";
        c2.money = 3000;
        
        c1.customerInfo(); // 이름 : 무민, 가진돈 : 2000
        c2.customerInfo(); // 이름 : 마루코, 가진돈 : 3000
    }
}
cs

Line 1 ~ 8 : Customer라는 객체를 구현한 클래스

Line 12 : Customer 인스턴스 c1 생성

Line 13 ~ Line 14 : c1 인스턴스의 값 설정

Line 16 : Customer 인스턴스 c2 생성

Line 17 ~ Line 18 : c2 인스턴스의 값 설정

Line 20 ~ 21 : 인스턴스의 값 출력

 

■ 참조 변수와 참조 값

- Customer c1 = new Customer()에서 c1을 Customer 인스턴스를 가리키는 참조 변수라고 한고, 참조 변수는 참조 값을 갖는다. 참조 값을 통해 인스턴스의 메모리 위치에 접근할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Customer {
    String name;
    int money;
}
 
public class Main {
    public static void main(String[] args) {
        Customer c1 = new Customer();
        c1.name = "무민";
        c1.money = 2000;
        
        System.out.println("참조 변수의 참조 값 : " + c1); // 참조 변수의 참조 값 : test.Customer@15db9742
    }
}
cs

Line 12 : 참조 변수의 참조 값을 출력한다.

'Java' 카테고리의 다른 글

자바(Java) 접근 제어자  (0) 2020.06.30
자바(Java) 생성자(Constructor)  (0) 2020.06.30
자바(Java) 객체 지향 프로그래밍(OOP)  (0) 2020.06.30
자바(Java) break, continue문  (0) 2020.06.26
자바(Java) for문  (0) 2020.06.26

(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)

 

■ 객체 지향 프로그래밍(OOP)

1) 객체(Object)

- 객체는 영어로 Object이고, 사전적 의미로는 물건 또는 대상을 의미한다. 객체는 우리 주변에 존재하는 물건이나 대상 전부를 의미한다고 생각하면 된다. 내가 카페에서 아메리카노를 주문하는 상황을 예로 들면, '나', '카페', '아메리카노'를 객체라고 할 수 있다.

 

2) 객체 지향 프로그래밍(OOP)

- 객체 지향 프로그래밍은 영어로 Object-Oriented Programming, 줄여서 OOP라고 표현하며, C언어처럼 프로그램을 작성한 순서대로 실행하는 절차 지향 프로그램과는 다르게 객체끼리 상호작용을 통해 기능을 구현하는 것을 말한다. 앞서 내가 카페에서 아메리카노를 주문하는 예를 보면, 내가 커피를 구매하기 위해 3000원을 지불하는 행위, 카페로부터 아메리카노를 전달받는 행위 자체를 구현할 수 있다. 객체 지향 프로그래밍은 클래스를 기반으로 프로그래밍한다.

 

■ 클래스(Class)

클래스는 객체의 속성과 기능을 코드로 구현한 것이다. 내가 카페에서 아이스 아메리카노를 구매했다면, '나', '카페', '아메리카노'가 속성이 되는데 이를 멤버 변수라고 하고, 내가 커피를 구매하기 위해 3000원을 지불하는 행위, 카페로부터 아메리카노를 전달받는 행위가 기능이 되며 이를 메소드(Method)라고 한다. 클래스의 이름은 대문자로 시작하고, 멤버 변수와 메소드는 첫 글자는 소문자로 시작해서 중간에 새로운 단어가 나올 때마다 대문자를 사용한다.

 

1) 멤버 변수(Member Variable)

- 멤버 변수는 접근 제어자, 자료형, 변수명으로 구성된다. 접근 제어자는 private, default, protected, public 네 가지가 있으며, 아무것도 사용하지 않는 경우를 default라고 한다. 자료형은 int, long, double 등 기본 자료형과 String, Customer 등 JDK에서 제공하거나 사용자가 직접 만든 클래스를 자료형으로 사용할 수 있다.

 

2) 메소드(Method)

- 메소드(Method)는 객체의 기능을 구현한 것을 말하며, 접근 제어자, 반환형, 메소드명으로 구성된다.  

 

 

■ 메소드(Method)

메소드(Method)는 함수의 한 종류로, 입력 값과 그에 따른 결과 값을 갖는다. 메소드(Method)를 사용하면 반복적으로 사용하는 코드를 묶어서 정의해 놓고, 필요할 때마다 가져다 쓸 수 있으므로 코드의 양을 줄일 수 있다. 또한 기능별로 나눠서 효율적으로 개발할 수 있고, 수정이 필요하면 해당 기능 부분만 수정하면 되기 때문에 유지보수가 쉽다.

 

1) 반환형(Return Type)

- 반환형(Return Type)은 메소드를 종료하면서 반환할 값의 타입을 의미한다. 메소드를 종료할 때 반드시 반환형에 해당하는 타입의 값을 반환하고 종료해야 한다. 만약 해당 메소드가 값을 반환할 필요가 없는 메소드라면 반환형으로 void를 사용하면 된다.

 

2) 매개변수(Parameter)

- 메소드는 입력 값과 그에 따른 결과 값을 갖는 것을 말한다. 입력 값에 따라 결과 값이 달라지게 되는데, 매개변수란 메소드에서의 입력 값을 말한다. 위의 add 메소드에서 num1과 num2가 매개변수이고, 메소드에 따라 매개변수가 존재하지 않을 수도 있다.

 

3) return

- return은 값의 반환 또는 프로그램의 종료 두 가지 기능을 수행할 수 있다. 만약 반환형이 void가 아니라면, return을 통해 해당 반환형의 값을 반환할 수 있고, 반환형이 void인 경우 return을 통해 프로그램을 강제로 종료시킬 수 있다.

 

 

 

 

 

 

 

 

'Java' 카테고리의 다른 글

자바(Java) 생성자(Constructor)  (0) 2020.06.30
자바(Java) 클래스(Class)와 인스턴스(Instance)  (0) 2020.06.30
자바(Java) break, continue문  (0) 2020.06.26
자바(Java) for문  (0) 2020.06.26
자바(Java) do-while문  (0) 2020.06.26

+ Recent posts