숨 참고 JAVA 다이브 🌊 (12) - 객체배열, 추상화, 인터페이스

joyfulwave·2022년 8월 18일
0

숨 참고 JAVA 다이브

목록 보기
12/21

어려울 거 같아서 미뤄뒀던 프로그래밍 공부 이번에 숨 딱 참고 Java 다이브 💦


💡객체배열

  • 일반 데이터 타입의 배열과 동일한 개념으로, 같은 클래스의 객체 여러 개를 그룹화할 수 있어요.
	// 일반 데이터 형 배열
    int[] num = new int[3];
    
    // 일반 데이터 형 배열의 요소 할당
    num[0] = 1;
    num[1] = 2;
    num[3] = 3;
    
    //객체 배열
    Army[] a = new Army[3];
    
    // 객체 배열의 요소 할당
    a[0] = new Army();
    a[1] = new Army();
    a[2] = new Army();    

📎 객체 배열을 통한 형변환

  • 배열의 생성이 부모 클래스로 지정되었을 경우, 모든 자식 클래스의 객체들은 그 배열에 포함될 수 있어요.
	Unit[] unit = new Unit[3];
    
    //배열의 요소 할당 과정에서 암묵적 형변환
    unit[0] = new Army();
    unit[1] = new Navy();
    unit[2] = new AirForce();

⚫️ for문을 이용한 일괄처리

  • 서로 다른 객체를 부모 형태의 배열에 담게 되면, 반복문으로 일괄 처리가 가능해요.
  • 이 때 배열의 각 요소를 통해 사용하는 메서드가 Override되어 있을 경우, 부모의 메서드가 아니라 자신이 재정의한 기능을 뜻해요.
	for( int i = 0; i < unit.length; i++ ){
		unit[i].attack();
	}

⚫️ instanceof 연산자

  • instanceof 연산자를 이용하여 몇 번째 요소가 어떤 객체에 대한 출처인지 판단할 수 있어요. instanceof는 boolean 형으로 결과를 반환해요.
	if( unit[0] instanceof Army ){
		Army temp = (Army)unit[0];
	}



💡 추상화

추상화(= Abstraction)는 필요한 부분, 중요한 부분을 통합하여 하나로 만드는걸 의미해요.

📎 상속성과 다형성

⚫️ 상속성

객체간의 공통적인 기능을 관리하기 위한 기법으로, 코드의 재사용을 통하여 프로그램의 유지보수를 편리 하게 해요.

⚫️ 다형성

다형성(Override, Overload)은 서로 다른 기능이지만 메서드의 이름을 공통되게 처리하여 전체 프로그램의 일관성을 유지하게 해줘요.

📎 Override 처리의 문제 발생 가능성

  • @Override 키워드를 사용하지 않고 메서드를 재정의(Override)하는 과정에서 메서드 이름에 실수가 발생하거나 에러가 아닌 새로운 메서드의 정의로 인식이되는 것과 같이 의도하지 않은 실행결과를 가져올 수 있어요.

⚫️ 상속 처리시, Override를 강제하기

  • 추상화 기법은 특정 클래스를 상속받은 경우, 부모의 특정 메서드들을 무조건 재정의하도록 강제하는 기법이에요.
  • 특정 메서드를 재정의하도록 강제함으로써, 자식 클래스들을 작성하기 위한 가이드의 역할을 할 수 있어요.
  • 즉, 추상화 기법은 java 클래스를 작성하기 위한 설계도를 소스코드 형태로 제시하는 역할을 해요.

  • abstract 메소드를 정의 하지 않는 경우 에러 발생

  • abstract 메소드를 정의

📎 추상 메서드 만들기

  • 추상 메서드를 정의하기 위해서는 'abstract' 키워드를 사용하여 메서드를 정의해요.
  • 추상 메서드는 자식 클래스가 구현해야하는 메서드의 가이드라인만 제시하기 위한 목적으로 사용되기 때문에, 선언만 가능하고 구현부가 없어요.
	public abstract void a();

📎 추상 메서드를 포함한 클래스

  • 추상 메서드를 하나 이상 포함하고 있는 클래스는 반드시 '추상 클래스'로 정의되어야 해요.
  • 추상 클래스는 'abstract' 키워드를 사용하여 정의할 수 있어요.
	public abtract class A{
    	public abstract void b();
    }
  • 추상 클래스는 객체를 생성할 수 없고, 반드시 상속을 통해서만 사용될 수 있어요. 즉 추상 클래스는 다른 자식 클래스를 위한 '가이드라인'의 역할을 해요..

📎 공통 기능과 설계 제시를 모두 처리

  • 추상 클래스는 생성자, 멤버변수, 일반 메서드등을 포함할 수 있어요. 공통 기능과 가이드라인을 모두 정하여 다른 클래스에게 상속될 수 있어요.
	// 추상 클래스
	public abstract class Hello{
		// 멤버변수
		private String msg;

		// 생성자
		public Hello( String msg ){
			this.msg = msg;
		}

		// 일반 메서드
		public String getMsg(){
			return this.msg;
		}

		// 추상 메서드 : 선언만 되고, 구현부를 위한 블록이 존재하지 않는다.
		public abstract void SayHello();
	}

📎 추상 클래스의 한계

  • 자바 클래스 간의 상속에는 하나의 부모만 존재할 수 있기 때문에, 다중 상속의 구현은 불가능해요.
	public abstract void A(){ .. }
    public abstract void B(){ .. }
    public abstract void C extends A(){ .. }
    // 다중 상속 불가능
    //public abstract void C extends A, B(){ .. }



💡 인터페이스

  • 완벽한 추상화를 구현하기 위한 Java Class의 한 종류예요.
  • 다중 상속이 가능하기 때문에 용도별로 세분화하여 필요한 요소만 상속할 수 있어요.

📎 abstract 클래스 와 interface

⚫️ abstract 클래스

  • 멤버변수, 생성자, 메서드, 추상메서드를 포함할 수 있어요.
  • 이 클래스를 상속받는 자식 클래스는 다른 클래스를 상속받을 수 없어요.
  • 객체의 생성이 불가능해요.

⚫️ interface

  • 상수, 추상메서드만 포함할 수 있어요.
  • 인터페이스는 다중 상속이 가능해요.
  • 객체의 생성이 불가능해요.

📎 인터페이스 상속을 위한 implements

  • 인터페이스의 상속은 implements 키워드를 사용해요.
  • 인터페이스도 추상화를 구현하고 있기 때문에, 인터페이스를 상속받는 클래스는 인터페이스 내의 모든 메서드들을 반드시 재정의 해야해요.

⚫️ 인터페이스의 다중 상속

  • 인터페이스는 콤마(,)로 연결하여 여러 개를 동시에 상속 받을 수 있어요.
	public class Monster implements Fight, Move{}
  • 필요한 경우 다른 클래스와 동시에 상속받을 수 있어요.
	public class Moster extends User impelments Fight, Move{}



💡추상클래스 VS 인터페이스

추상클래스는 extends를 통하여 자신의 기능을 재정의, 확장해가는 개념이고 인터페이스는 정의된 기능들을 각각의 클래스에 맞게 기능을 구현하는 느낌으로 구별할 수 있어요.




다음 다이브에서 또 만나요 🌊




출처
https://media.giphy.com/media/l2Je1bFuOpkNpyqYM/giphy.gif
https://media.giphy.com/media/Jbb3KS22397YQ/giphy.gif

0개의 댓글