반응형
해당 강의를 보고 정리한 것입니다.
https://programmers.co.kr/learn/courses/5
메서드 오버 로딩
: 매개변수의 유형과 개수를 다르게 하여 같은 이름의 메서드를 여러 개 가질 수 있게 하는 기술
메서드 오버 로딩 방법
- 이름은 같지만 매개변수가 다른 메서드
public class MyClass2 { public int plus(int x, int y) { return x+y; } public int plus(int x, int y, int z) { return x+y+z; } public String plus(String x, String y) { return x+y; } }
- 메서드 오버 로딩은 매개변수 부분이 달라야 한다.
- 해당 코드처럼 변수명은 다르지만 매개변수의 타입과 개수가 동일한 메서드를 또 정의할 수는 없다.public int plus(int i, int f){ return i+f; }
오버 로딩된 메서드 이용하기
- 메서드의 인자에 어떤 값이 쓰이냐에 따라서 각기 다른 메서드가 호출
public class MethodOverloadexam { public static void main(String[] args) { MyClass2 mc = new MyClass2(); System.out.println(mc.plus(2, 4)); System.out.println(mc.plus(2, 4, 5)); System.out.println(mc.plus("hello", " world")); } }
생성자 오버 로딩
: 생성자의 매개변수의 유형과 개수를 다르게 해 같은 이름의 생성자를 여러 개 만들 수 있다.
- 여러 개 선언 가능
- 매개변수의 수와 타입이 다르다면 여러 개의 생성자를 선언 가능
public class Car { String name; int number; public Car() { } public Car(String name) { //생성자 this.name = name; } public Car(String name, int number) { this.name = name; this.number = number; } }
- 매개변수의 수와 타입이 다르다면 여러 개의 생성자를 선언 가능
오버 로딩된 생성자 이용하기
public class CarExam {
public static void main(String[] args) {
Car c1 = new Car();
Car c2 = new Car("구급차");
Car c3 = new Car("소방차", 1004);
c1.number = 1234; // c1.number = 1234란 c1이 참조하는 객체의 number를 1234 로 설정
System.out.println(c1.name); //콘솔에 c1이 참조하는 객체의 name 을 출력합니다.
//소방차 출력
System.out.println(c1.number); //콘솔에 c1이 참조하는 객체의 number 를 출력합니다.
//1234 출력
String name = c2.name; //c2가 참조하는 객체의 name 을 String 타입 변수 name 도 참조하게 합니다.
}
}
오버라이딩
: 부모가 가지고 있는 메서드와 똑같은 모양의 메서드를 자식이 가지고 있는 것.
즉, 부모의 메서드를 재정의 하는 것이다.
메서드 오버라이딩
- Car 클래스를 상속받은 Bus 클래스는 부모 클래스가 가지고 있는 run() 메서드를 잘 사용한다.
- 부모 생성자
- 자식 생성자public class Car { String name; int number; public void run() { System.out.println("달리는 중"); } }
-테스트>> Bus의 run메서드
- 메서드를 오버라이딩 하면, 항상 자식 클래스에서 정의된 메서드 호출
- 부모 클래스의 메서드를 호출하고자 한다면 super키워드 사용(후에 자세하게 배움) public class Bus extends Car{ public void run() { super.run(); //부모의 run()메서드를 호출 System.out.println("Bus의 run메서드"); } }
public class BusExam { public static void main(String[] args) { Bus bus = new Bus(); bus.run(); } }
public class Bus extends Car{ public void run() { System.out.println("Bus의 run메서드"); } }
this()
: 자기 생성자를 호출하는 방법
- 기본 생성자를 호출하였을 때 name을 "이름없음", 숫자를 0으로 초기화 하기
public Car() { this.name = "아름없음"; this.number = 0; }
- 위 코드처럼 작성했을 경우 코드의 중복이 발생한다.
- this()를 사용하여 자신이 가지고 있는 다른 생성자를 이용할 수 있다.
- 자기 자신의 생성자를 호출해 비슷한 코드가 중복돼서 나오는 것을 방지할 수 있다.public class Car { String name; int number; public Car() { this("이름없음",0); } public Car(String name) { //생성자 this(name, 0); } public Car(String name, int number) { this.name = name; this.number = number; } }
패키지(package)
: 서로 관련이 있는 클래스 또는 인터페이스들의 묶음. 패키지를 사용함으로써 클래스들이 필요할 때만 사용될 수 있도록 하고, 클래스를 패키지 이름과 함께 계층적인 형태로 사용해 다른 그룹에 속한 클래스와 발생할 수 있는 클래스 이름 간의 충돌을 막아줌으로 클래스의 관리를 편하게 해 준다.
패키지 정의 방법
- package이름은 보통 도메인 이름을 거꾸로 적은 후, 그 뒤에 프로젝트 이름을 붙여서 만듦.
(프로젝트 이름 뒤에 또 다른 이름 가능) - package이름은 폴더명.폴더명.폴더명 과같은 형식으로 생성.
(각각의 폴더명은 숫자로 시작 불가능) - 예시) 도메인 이름이 8cruz.com이고 프로젝트 이름이 javastudy라면 com.eightcruz.javastudy.hello
- 도메인(8cruz)이 숫자로 시작하므로 eightcruz로 바꿔서 사용(첫 글자 숫자 불가능)
- 도메인으로 사용하는 이유는 패키지가 중복되는 것을 방지하기 위함이므로, 반드시 존재하는 도메인이 아니라도 상관없음.
이클립스에서 패키지 생성하기
- 소스 폴더를 선택 후 우측 버튼 클릭 - 패키지 생성
- 패키지 이름에 kr.co.helloWorld.javastudy 입력
- 해당 패키지에 클래스 작성 (여기선 Hello 클래스 작성함)
- 작성된 클래스 파일의 첫 줄에 package com.eightcruz.javastudy.Hello; 생성
- 패키지를 생성하는 예약어는 package
패키지에 생성된 클래스 사용하기
- java.lang패키지를 제외하고는 다른 패키지에 있는 클래스를 사용하려면 import 사용
import kr.co.helloWorld.javastudy.Hello;
- 해당 코드는 kr.co.helloworld.javastudy패키지 아래의 Hello클래스를 사용하겠다는 것 - 패키지의 모든 클래스 사용 시 *을 적어준다
import kr.co.helloWorld.javastudy.*;
import하지 않고 사용하는 방법
- 각기 다른 패키지에 존재하는 같은 이름의 클래스 파일을 사용할 때, 혹은 import 사용하기 싫을 때
public class PacageExam { public static void main(String[] args) { kr.co.helloWorld.javastudy.Hello exam = new kr.co.helloWorld.javastudy.Hello(); } }
반응형
'Language > Java' 카테고리의 다른 글
자바 입문하기14 - 클래스 형변환 (0) | 2022.01.11 |
---|---|
자바 입문하기13 - 상속, 접근제한자, 추상클래스, super (0) | 2022.01.11 |
자바 입문하기11 - 생성자, this (0) | 2022.01.11 |
자바 입문하기10 - scope, static, enum (0) | 2022.01.10 |
자바 입문하기9 - String (0) | 2022.01.10 |