[Java][국비교육] Day 14

Ga02·2023년 1월 13일

국비교육

목록 보기
13/82

🔍 for each 구문

배열이나 컬렉션의 모든 요소를 이용하여 반복 작업을 수행할 수 있도록 만들어진 반복문

for( [요소의 데이터타입 or 부모의 데이터 타입도 가능] [변수명] : [배열 or 컬렉션] ) {
	//for에서 선언한 변수를 활용하는 코드
}
  • 0번째 인덱스부터 마지막까지 하나씩 변수에 대입하며 반복

👀example

int[] arr = {1, 2, 3}

for(int n : arr) {
	System.out.println( n );
}
			👇🏻
for(int i=0; i<arr.length; i++) {
	System.out.println( arr[i] );
}

🔍 다형성, Polymorphism

한 요소가 다양한 모습으로 표현되거나, 다양한 기능을 수행하는 용어 👉🏻 객체지향 언어의 특징

  • 부모 클래스타입의 객체변수를 이용하여 다양한 자식 클래스 타입을 처리
    👉🏻 부모타입의 객체변수에 자식 타입을 대입할 수 있음
    👉🏻 오버라이딩 메소드를 호출할 때 동적바인딩으로 다양한 자식 클래스의 기능을 수행

👀example

<부모타입 객체변수에 자식타입 인스턴스 대입>
Parent p;
p = new Child1();
p = new Child2();
p = new Child3();

public void out( Parent p ) { //부모타입 객체변수
}
public void out( new Child1() ); //자식타입 인스턴스 대입
public void out( new Child2() );
public void out( new Child3() );

🔍 abstract, 추상화 키워드

✔ 추상메소드를 가지려면 추상클래스가 되어야 하지만, 추상클래스가 되기위해 추상메소드가 있어야하는 것은 아님
__✔ 구현부가 필요없는 부모클래스의 메소드는 abstract를 붙여 중괄호를 생략할 수 있음 👉🏻 실체가 없는 추상화된 메소드 👉🏻 추상화된 메소드를 가진 추상화된 클래스는 인스턴스(실체화)를 할 수 없음

➰ 추상메소드

동작(실행)코드를 구현하지 않고 추상화시킨 메소드

[접근제한자] abstract [리턴타입] 메소드명 (매개변수);
  • 메소드의 구현부를 작성하지 않고 정의부만 작성하고 ; (세미콜론)으로 끝냄
    • 정의부 : 메소드 머리, Method Head / 메소드 정의코드의 첫 줄로, 메소드의 동작방식, 사용방법을 알 수 있음
    • 구현부 : 메소드 몸체, Method Body / 메소드가 호출되었을 때 실행할 코드를 작성하는 중괄호 영역
  • 추상메소드를 멤버로 가지려면 추상클래스가 되어야 함
  • 추상메소드는 상속이 가능하지만, 자식클래스가 추상클래스가 되지 않기 위해서는 상속받은 추상메소드의 구현부를 채워야 함 ➡ 오버라이딩 해야함

➰ 추상 클래스

[접근제한자] abstract class [클래스명] {
}
  • 인스턴스화(실체화)할 수 없는 클래스 👉🏻 new 연산자를 이용해 객체생성을 할 수 없음
    단, 데이터타입으로 사용하여 객체변수를 선언할 수는 있음
  • 추상메소드를 멤버로 가질 수 있음 ➡ but, 반드시 추상메소드를 멤버로 가져야 하는 것음 아님

👀example

public abstract void class Parent() {
}
public void Child() {
}

Parent p = new Child();
------------------------------------------------

//객체를 생성할 수 없는 추상클래스
public abstract class Person {
	protected String name;
    
    public Person(String name) {
    	this.name = name;
    }
    
    //실행할 수 없는(실행할 구현부가 없는) 추상메소드
    public abstract void display();
}

----------------------------------------------
public class Proffesor extends Person {

	private String major;
    
    //디폴트 생성자
    //public Proffesor() {
    //	super(); 👉🏻 현재 부모클래스에서 작성된 디폴트 생성자가 없어서 오류
    //}
    
    public Proffesor(String name, String major) {
    	super(name);
    	this.major = major;
    }
    👉🏻 Person은 객체생성을 못해 초기화가 불가능 하므로 자식클래스의 생성자를 통해 부모의 멤버필드를 함께 초기화
    	➡ 원래는 인스턴스를 생성하면서 ( new Person(name) ) 초기화
        
    public void display() {
    	System.out.println( name + major);
    }
    👉🏻 부모의 추상메소드 구현

profile
IT꿈나무 댓츠미

0개의 댓글