본문 바로가기
자바(Java)

자바 입문하기12 - 오버로딩, 오버라이딩, this(), 패키지

by codeyaki 2022. 1. 11.
반응형

해당 강의를 보고 정리한 것입니다.

https://programmers.co.kr/learn/courses/5

 

자바 입문

자바 입문 가장 널리 쓰이는 프로그래밍 언어 Java로 프로그래밍의 기초를 다져보세요. 이 강의의 내용을 책으로 만나고 싶으시면 여기를 눌러 책 정보를 확인하세요. 강의를 다 들었는데, 지금

programmers.co.kr


메서드 오버 로딩

매개변수의 유형과 개수를 다르게 하여 같은 이름의 메서드를 여러 개 가질 수 있게 하는 기술

 

메서드 오버 로딩 방법

  • 이름은 같지만 매개변수가 다른 메서드
    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로 바꿔서 사용(첫 글자 숫자 불가능)
      - 도메인으로 사용하는 이유는 패키지가 중복되는 것을 방지하기 위함이므로, 반드시 존재하는 도메인이 아니라도 상관없음.

이클립스에서 패키지 생성하기

  1. 소스 폴더를 선택 후 우측 버튼 클릭 - 패키지 생성
  2. 패키지 이름에 kr.co.helloWorld.javastudy 입력
  3. 해당 패키지에 클래스 작성 (여기선 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();
    	}
    
    }​

 

반응형