본문 바로가기
👋국비 후기 모음👋 (이력도 확인 가능!)
개발/자바

자바 상속, Inheritance / 오버라이딩, Overriding / super / final / 다형성 / for each 구문

by 킴뎁 2021. 1. 25.
728x90
반응형

상속, Inheritance

- 기존의 클래스를 재사용하여 새로운 클래스를 작성할 수 있게 하는 문법

- 목적 : 클래스 코드의 재사용

코드의 재사용

기존의 코드를 이용하여 새로운 코드를 개발하는 것

(필요한 부분은 수정하고, 추가하기 한다)

class Animal {
	private String name;
	private int age;
	private String feed;
}
class Dog extends Animal {
/*	private String name;
	private int age;
	private String feed;  */
	
	public void cry() {
		System.our.println("멍멍");
	}
}
class Cat extends Animal {
/*	private String anme;
	private int age;
	private String feed;  */

	public void cry() {
		System.out.println("야옹");
	}
}
class Horse extends Animal {
	
	public void cry() {
		System.out.println("히힝");
	}
}
  • 클래스의 중복되는 코드를 하나로 관리할 수 있게 해 준다
  • 상속을 주는 클래스(부모클래스)의 코드를 변경하면 상속을 받는 클래스(자식 클래스)들도 전부 반영된다
  • 상속을 주는 클래스 : 부모 클래스, 수퍼, 상위, Based(기준의)
  • 상속을 받는 클래스 : 자식 클래스, 서브, 하위, Derived(유도된, 파생된)

상속의 문법

class Parent {
	int n1;
	int n2; 
	String name;
}
class Child extends Parent {
}
  • Child 클래스는 Parent 클래스의 모든 멤버를 상속받는다
  • Child 클래스는 멤버를 작성하지 않아도 Parent의 멤버를 가지고 있는 것처럼 사용할 수 있다.

오버라이딩, Overriding

  • 메소드 재정의
  • 상속받은 메소드를 자식 클래스가 새롭게 정의하는 것
  • 기존의 코드를 덮어 씌운다
class Animal {
	String name;
	int age;

	public void cry() {
	}
}

class Dog extends Animal {
	@Override
	public void cry() {
	}
}

class Cat extends Animal {
	@Override
	public void cry() {
	}
}

class Horse extends Animal {
	@Override
	public void cry() {
	}
}

오버로딩, Overloading

  • 메소드 중복 정의
  • 같은 이름의 메소드를 매개변수의 개수 또는 타입, 순서를 다르게 작성하여 다른 메소드를 추가 정의하는 것

바인딩, Binding

  • 메소드의 호출코드(사용)와 메소드의 정의코드(구현)가 연결되는 과정
  • 정적 바인딩 : 프로그램 실행 전 바인딩 되는 것 -> 변수의 타입
  • 동적 바인딩 : 실행 도중에 메소드가 호출될 때 바인딩 되는 것 -> 인스턴스의 타입
  •  ** 자바는 기본적으로 동적 바인딩을 수행한다

super 키워드

super

  • 상속받은 부모객체 참조
  • 자식클래스 코드에서 (상속받은)부모클래스 멤버에 접근할 때 사용
  this.num = 10; //자식클래스의 멤버 num
  super.num = 20; //부모클래스의 멤버 num
  //메소드가 오버라이딩 되어있는 상황일 때
  this.display(); //오버라이딩한 메소드
  super.display(); //오버라이딩 전 부모메소드

super()

  • 수퍼 생성자, 부모클래스 생성자 호출
  • 자식클래스의 생성자에서 부모클래스의 생성자를 호출할 때 사용한다
  • 직접 호출코드를 작성하지 않으면 자동으로 부모클래스의 디폴트 생성자를 호출한다
  • 부모클래스에 정의되어있다면 전달인자를 넣어서 호출할 수 있다
  • 자식클래스 생성자의 첫 번째 코드로 사용해야한다

final 키워드

  • 더 이상 확장(변경)할 수 없도록 설정하는 키워드
  • final 키워드 적용위치
    • 변수
      • 딱 한번만 초기화(대입) 할 수 있도록 설정
      • 변수를 상수화시킴
      • ex) public final int MAX =. ;
      •       public static final int LEN = 10;
    • 메소드
      • 더 이상 오버라이딩 할 수 없도록 설정
      • ex). public final void out() {
      •          //자식클래스에서 재정의(override)불가
      •       }
    • 클래스
      • 더 이상 자식클래스를 생성할 수 없도록 설정
      • ex) public final class Child() {
      •         //자식클래스를 만들 수 없음
      •          //상속을 줄 수 없게 된다
      •       }

다형성, Polymorphism

  • 한 요소가 다양한 모습으로 표현되거나, 다양한 기능을 수행할 수 있음을 뜻함
  • 부모클래스 타입의 객체변수를 이용하여 다양한 자식클래스 타입을 처리한다
    • -> 대입, 동적 바인딩 메소드 호출 등등
Parent p1 = new Child1();
Parent p2 = new Child2();
public void out(Parent p){
}
out( new Child1() );
out( new Child2() );

 

for each 구문

for( [요소의 데이터타입] [변수명] : [배열or컬렉션] ) {
	//변수명 사용 가능
}
  • 배열의 모든 요소를 변수에 넣으면서 반복한다
  • 배열의 0번째 인덱스 요소부터 마지막요소까지 한 번 반복할 때 하나의 요소를 대입하면서 반복한다
int[] arr = { 1,2,3,4,5 };

		for( int num : arr ) {
		  //num 사용
		}
		// 5번 반복, 매 반복마다 num변수에 1~5까지 차례대로 대입된다

		// for(int i=0; i<arr.length; i++) { } 와 비슷한 반복

객체 지향 프로그래밍 (OOP)의 주요 특징 3가지

  • 캡슐화
    • 서로 연관있는 여러 데이터들을 하나의 클래스로 묶어서 관리한다
    • 클래스 외부에서의 접근을 제한하면서 데이터들을 보호한다 (정보은닉)
  • 상속
    • 기존의 클래스 코드를 이용하여 새로운 클래스를 생성할 때 사용한다
    • 이미 작성된 코드를 중복으로 작성하지 않고 원하는 새로운 코드를 구현할 수 있따
    • 코드 재사용성을 높여준다
  • 다형성
    • 하나의 타입으로 상속 관계에 있는 다양한 객체를 다룰 수 있따
    • 메소드 오버로딩을 줄일 수 있다.
반응형
👋국비 후기 모음👋 (이력도 확인 가능!)

댓글