1. 메서드 오버로딩 (Overloading)
1) 메서드의 이름은 동일하나, 매개변수(parameter)의 개수나 종류를 달리하여 메서드를 생성하는 것을 의미한다.
- 매개변수에 따른 메서드명을 절약하기 위한 방법
2) println()이 메서드 오버로딩의 대표적인 예가 된다.
3) 메서드의 리턴타입과는 아무런 관련이 없다.
cf) 메서드 오버라이딩(Overriding)과 비교!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | package methodex; class Score { int sum(int score1, int score2) { return score1 + score2; } // 매개변수가 다르므로 인정 double sum(int score1, double score2) { return score1 + score2; } int sum(int score1, int score2, int score3) { return score1 + score2 + score3; } // 매개변수가 다르므로 인정 int sum(int score1, int score2, String score3) { return score1 + score2 + Integer.parseInt(score3); } int sum(int score1, int score2, int score3, int score4) { return score1 + score2 + score3 + score4; } } public class MethodTest10 { public static void main(String[] args) { // 오버로딩의 대표적인 예 System.out.println(); } } | cs |
2. 생성자 (Constructor)
1) 생성자는 '인스턴스 변수'의 초기화에 사용되는 일종의 메서드이다.
2) 모든 클래스에는 반드시 한 개 이상의 생성자가 존재해야 한다.
3) 기본 생성자
- 클래스명() {}
- 기본 생성자는 매개변수 (parameter)가 없는 생성자를 의미하며 구현하지 않아도 자동으로 생성된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | package constructorex; class Car { String name; String color; int doorNum; // 기본 생성자 Car() { System.out.println("기본 생성자: Car()"); } // 생성자 오버로딩 Car(String name, String color, int doorNum) { // this: 지역 변수명과 인스턴스 변수명이 같을 때, 인스턴스 변수명임을 알려주는 키워드 System.out.println("생성자 오버로딩: Car(name, color, doorNum)"); this.name = name; this.color = color; this.doorNum = doorNum; } void showInfo() { System.out.println("이름: " + name); System.out.println("색상: " + color); System.out.println("문의 개수: " + doorNum); } } public class ConTest01 { public static void main(String[] args) { // 기본 생성자 호출 Car c1 = new Car(); // 기본 생성자 + 초기화 c1.name = "avante"; c1.color = "black"; c1.doorNum = 4; c1.showInfo(); System.out.println(); // 생성자 오버로딩으로 호출 Car c2 = new Car("bmw", "yellow", 2); c2.showInfo(); } } | cs |
# 실행 화면
4) 생성자는 인스턴스를 생성할 때마다 'new' 를 통해 호출된다.
5) 메서드 vs 생성자
(1) 메서드
(static) 리턴타입 메서드명() {
return 값;
}
(2) 생성자
클래스명() {
}
(3) 차이점
- 생성자는
클래스 이름을 따른다.
static, 리턴타입을 붙이지 않는다.
new를 통해서 인스턴스를 생성할 때만 호출이 가능하다.
(4) 공통점
- 오버로딩이 가능하다.
- 매개변수(parameter)를 가질 수 있다.
6) 기본 생성자는 본래 자동으로 생성해주나, 매개변수가 있는 생성자를 한 개라도 만들게 되면 그 역할을 수행하지 않는다.
- 때문에 가급적 클래스 설계 시 기본 생성자를 무조건 만들고 시작하는 것을 권장한다.
3. 참조변수 this
1) 자기 자신을 가리키는 참조변수이다.
syso(this) == syso(객체명) : 주소값
2) 인스턴스 변수와 지연 변수의 이름이 같을 때, 구별할 용도로 사용된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | package constructorex; class Person { String name; int age; public Person() {} Person(String name, int age) { this.name = name; this.age = age; System.out.println("this의 주소: " + this); } } public class ConTest02 { public static void main(String[] args) { Person hgd = new Person(); Person hgd2 = new Person("홍길동2", 14); System.out.println("Person객체의 주소: " + hgd2); } } | cs |
# 실행 결과
4. this()
1) 메서드 내에서 다른 메서드의 호출이 가능하듯이, 생성자 내에서도 다른 생성자의 호출이 가능하다.
2) this() 메서드는 생성자 내에서 반드시 첫 줄에 와야 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | package constructorex; class CarTest { String name; String color; int doorNum; CarTest() { // name = "avante"; // color = "black"; // doorNum = 4; this("avante", "black", 4); } CarTest(String color) { // name = "avante"; // this.color = color; // doorNum = 4; this("avante", color, 4); } CarTest(String name, String color, int doorNum) { this.name = name; this.color = color; this.doorNum = doorNum; } void showInfo() { System.out.println("이름: " + name); System.out.println("색상: " + color); System.out.println("문의 개수: " + doorNum); } } public class ConTest03 { public static void main(String[] args) { CarTest c1 = new CarTest(); c1.showInfo(); System.out.println(); CarTest c2 = new CarTest("red"); c2.showInfo(); } } | cs |
'JAVA > JAVA1' 카테고리의 다른 글
JAVA1_day17 | 추가공부 (0) | 2018.01.02 |
---|---|
JAVA1_day17 | 클래스 Class 연습문제 (2) (0) | 2018.01.02 |
JAVA1_day15 | 클래스 Class 연습문제 (1) (0) | 2017.12.28 |
JAVA1_day15 | 클래스 Class (3) (0) | 2017.12.28 |
JAVA1_day14 | 추가공부 (0) | 2017.12.27 |