ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java | 메소드 Overloading & 생성자 Overload
    JAVA/JAVA 2020. 1. 22. 17:32

    Overloading 오버로딩

    메소드의 이름은 동일하게 지정하고 매개변수의 유형과 개수를 변경하여
    여러 개의 메소드를 하나의 메소드처럼 정의하는 기법

    → 비슷한 유형의 메소드들이 여러 개 필요할 때
    서로 다른 메소드들을 마치 하나의 메소드처럼 사용할 수 있음

    1. 메소드 이름 동일하게 설정
    2. 메소드 매개변수 유형, 개수 다르게 설정
    3. 필요에 따라 메소드 return형을 다르게 설정
      ※ return형만 다르게 작성하면 에러 발생

    사용례_메소드 오버로딩

    public class PrintTest {
    
        // Method Overloading, 매개변수 O, 반환값 X
        void print(char c) {    // char형 매개변수
            System.out.println("입력받은 문자: "+c);
        }
    
        void print(int i) {        // int형 매개변수
            System.out.println("입력받은 정수: "+i);
        }
    
        void print(boolean b) {     // boolean형 매개변수
            System.out.println("입력받은 논리값: "+b);
        }
    
        public static void main(String[] args) {
            PrintTest pt = new PrintTest();
            pt.print('A');        // 입력받은 문자: A
            pt.print(23);        // 입력받은 정수: 23
            pt.print(23>33);    // 입력받은 논리값: false
    
        }

    ※ 메소드 이름은 print로 동일하지만 매개변수 유형에 따라서 서로 다른 메소드가 호출됨


    Constructor Overload 생성자 오버로드

    다양한 방법으로 멤버변수의 값을 초기화할 수 있도록 함

    생성자도 하나의 메소드이기 때문에 메소드 오버로딩과 형식은 동일함


    사용례_생성자 오버로드

    class Person {
    
        // 멤버 변수
        private String name; // 이름
        private int age; // 나이
    
        // 기본 생성자, 생략 가능
        Person(){}
    
        // 생성자 오버로드, 가능한 조합 개수=2의 멤버변수 개수 제곱(기본생성자 포함)
        Person(int a){
            age = a;
        }
    
        Person(String n){
            name = n;
        }
    
        // 여러 가지 조합이 가능하지만 보통 아래의 형식을 많이 사용함
        Person(String n, int a){
            name = n;
            age = a;
        }
    
        // 정보 출력 메소드
        void display() {
            System.out.println("이름: " + name + ", 나이: " + age);
        }
    
    public class PersonHandling {
        public static void main(String[] args) {
    
            Person p = new Person();
             // Person 클래스의 객체 p를 생성하면서 기본생성자 Person 호출
            p.display();    // 이름: null, 나이: 0
    
            Person p2 = new Person(23);
            p2.display();    // 이름: null, 나이: 23
    
            Person p3 = new Person("홍길동");
            p3.display();    // 이름: 홍길동, 나이: 0
    
            Person p4 = new Person("강감찬", 23);
            p4.display();    // 이름: 강감찬, 나이: 23
        }
    }

    ※ 생성자의 이름은 모두 Person으로 동일하지만
    매개변수에 따라 서로 다른 생성자가 호출되고, 멤버 변수에 저장되는 값이 달라짐

     

    ※ 멤버 변수의 값을 따로 설정하지 않으면 문자 자료형은 null,
    정수, 실수 자료형은 0,
    논리형은 false로 기본값이 초기화됨


    사용례_메소드 오버로딩 + 생성자 오버로드

    Method간 호출

    1. main() → 일반 메소드[객체 생성, 객체명.메소드명(~)]
    2. 서로 다른 클래스 : 일반 메소드 → 일반 메소드[객체생성, 객체명.메소드명(~)]
    3. 동일한 클래스 : 생성자, 일반 메소드 → 일반 메소드[메소드명(~)]
      ※ 동일한 클래스 내의 메소드는 메소드 이름만으로 호출 가능
    public class PrintTest {
    
        /* Constructor Overload + Method Overloading
            생성자 내부에서 클래스 내의 다른 메소드 호출 */
        PrintTest(){};
        PrintTest(char x){
            print(x);
        };
        PrintTest(int y){
            print(y);
        };
        PrintTest(boolean z){
            print(z);
        };
    
        // Method Overloading, 매개변수 O, 반환값 X
        void print(char c) {
            System.out.println("입력받은 문자: " + c);
        }
    
        void print(int i) {
            System.out.println("입력받은 정수: " + i);
        }
    
        void print(boolean b) {
            System.out.println("입력받은 논리값: " + b);
        }
    
        public static void main(String[] args) {
            PrintTest pt1 = new PrintTest('v');      // 입력받은 문자: v
            PrintTest pt2 = new PrintTest(23);       // 입력받은 정수: 23
            PrintTest pt3 = new PrintTest(23 > 11);  // 입력받은 논리값: true
        }
    }

    여러 개의 메소드나 생성자를 마치 하나처럼 사용할 수 있게 하는 기법인
    오버로딩과 생성자 오버로드에 대해 알아보았습니다.

    오버로딩 / 오버로드를 사용하면

    비슷한 유형의 메소드들을 하나의 이름으로 묶어서 편리하게 사용할 수 있고,

    생성자 역시 매개변수에 따라 자동으로 매개변수에 맞는 생성자가 호출되도록 할 수 있습니다.

    'JAVA > JAVA' 카테고리의 다른 글

    Java | Java 메모리 구조  (0) 2020.01.28
    Java | This  (0) 2020.01.22
    Java | Constructor 생성자  (0) 2020.01.22
    Java | Encapsulation 캡슐화 & 접근 제어자 & set(), get()  (0) 2020.01.21
    Java | str.equals() & str.contentEquals() 비교  (0) 2020.01.21

    댓글

Designed by Tistory.