-
JAVA - 오버로딩, 오버라이딩CS/JAVA 2024. 6. 4. 01:34
java에는 오버로딩과 오버라이딩라는 개념이 있다. 개념 자체가 생소하고 이름이 비슷해 어렵지만, 자바에서 아주 기본으로 쓰이고 중요한 개념이니 확실하게 이해해보자!💪
오버로딩 Overloading
오버로딩이란, 같은 클래스 내에서 이름은 같지만 인자의 갯수, 형 등이 다른 메서드이다.
바로 코드를 보며 알아봐보자!
아래 클래스에서 세개의 이름이 같은 메서드를 만들고, main 메서드에서 오버로딩 메서드를 호출했다.
메서드를 호출할 때 메서드의 이름이 같은데도 각각 다른 결과가 나왔다.
아래 클래스에서 이름이 같은 세 개의 메서드들을 오버로딩이라한다.
public class Calculate { int num01; int num02; int num03; // 1번 메서드 int calNum(int n1, int n2){ return n1+n2; } // 2번 메서드 int calNum(int n1, int n2, int n3){ return n1 + n2 + n3; } // 3번 메서드 int calNum(int n1, int n2, String str){ System.out.println(str); return n1+n2; } }public class CalcMain { public static void main(String[] args) { Calculate calc = new Calculate(); int result01 = calc.calNum(10,20); System.out.println("result : "+result01); int result02 = calc.calNum(10,20,30); System.out.println("result : "+result02); int result03 = calc.calNum(10,20,"계산해봅시다!"); System.out.println("result : "+result03); } } // 실행 결과 : // result : 30 // result : 60 // 계산해봅시다! // result : 30메서드를 호출할 때 이름이 같은데 어떤 메서드를 실행해야하는지 어떻게 아는 것일까?
인자로 구분하면된다.
두 개의 int형 인자를 넣으면 1번 메서드가, 세 개의 int형 인자를 넣으면 2번 메서드가,두 개의 int형 인자와 한 개의 String인자를 넣으면 3번 메서드가 실행되는 것이다.
오버로딩은 생성자에서도 많이 사용된다.
name, age, classNum 정보를 담을 수 있는 Student 클래스가 있을 때 한 개 이상의 생성자를 만들 수 있다.
학생 정보를 저장하는데, 전학 올 예정인 학생이라면 반이 아직 안정해졌을 수도 있다!
그럴때 classNum까지 입력해야하는 생성자를 사용하기 보다는 name과 age만 입력하면 되는 생성자를 사용하면 된다.
public class Student { String name; Integer age; Integer classNum; public Student(String name, Integer age, Integer classNum) { this.name = name; this.age = age; this.classNum = classNum; } public Student(String name, Integer age) { this.name = name; this.age = age; } }public class StudentMain { public static void main(String[] args) { Student student01 = new Student("철수",20, 1); Student student02 = new Student("영수",25); } }오버라이딩 Overriding
오버라이딩이란 상속 관계에서, 자식 클래스에서 부모 클래스의 메서드와 같은 이름의 메서드를 다시 만드는 것이다.
부모에 있는 속성들을 상속받고 싶지만, 그 중 특정 메서드만 기능을 바꾸고싶을 때 사용할 수 있다.
public class Parent { int sum(int num01, int num02){ return num01 + num02; } }public class Child extends Parent{ int sum(int num01, int num02){ return num01 * num02; } }public class Main { public static void main(String[] args) { Child child = new Child(); Integer result = child.sum(10,20); System.out.println(result); } } // 출력 결과 : // 200Child는 Parent를 상속받아 num01 + num02 결과를 반환하는 메서드를 가지고 있다. 하지만 이 sum과 같은 이름의 메서드를 다시 구현해 사용할 수 있다.
위의 코드와 같이 오버라이딩한 후 sum 메서드를 실행하면, Parent 클래스의 sum 메서드의 결과(30)가 아닌, Child 클래스의 sum 메서드의 결과인 200이 나온다.
'CS > JAVA' 카테고리의 다른 글
JVM(Java Virtual Machine) (4) 2024.09.02 JAVA - Tomcat, Servlet 으로 클라이언트 요청받기 (2) 2024.06.17 JAVA - JDBC 사용해 db서버와 데이터 요청/응답 받기 (1) 2024.06.05 JAVA - 상속, 생성자 (0) 2024.06.04 JAVA - static , 접근제어자 (1) 2024.06.03