yeahzzz
archive
yeahzzz
전체 방문자
오늘
어제
  • 분류 전체보기 (164)
    • Language (41)
      • Python (12)
      • JAVA (21)
      • C&C++ (8)
    • Algorithms (25)
      • programmers (9)
      • study log (16)
    • Problems & Solutions (14)
    • Major (29)
      • Data Structure & Algorithm (14)
      • Linux(Ubuntu) (9)
      • Security (2)
      • Linear Algebra (4)
    • FE (44)
      • Web(HTML5, CSS, JS) (5)
      • React & TS (26)
      • 코딩일기 (10)
    • BE (1)
      • Node.js (1)
    • Pytorch (8)
    • Server (2)

블로그 메뉴

  • 홈

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
yeahzzz

archive

객체 배열 / 추상화
Language/JAVA

객체 배열 / 추상화

2021. 8. 31. 15:04

객체 배열

일반 데이터 타입의 배열과 동일한 개념.

같은 클래스의 객체 여러개를 그룹화 할 수 있음. 

* 동일한 클래스의 객체는 배열로 묶어서 여러개 한번에 제어 가능. 

 

일반 데이터형.. int[] data = new int[3];

객체 배열 .. Array[] data new Array[3];

 

각 경우에 대한 배열의 요소 할당 처리 : 일반 데이터형은 단순하게 값을 대입함. but 객체 배열은 new를 사용하여 객체 할당 필요

ex)

data[0] = new Array();

data[1] = new Array();

data[2] = new Array();

 

- 부모 클래스의 배열에 자식 클래스의 객체 넣기

: 배열의 생성이 부모 클래스로 지정되었을 경우, 모든 자식 클래스의 객체들은 그 배열에 포함될 수 있음. 

 


객체 배열과 객체 형변환 함께 사용

1. 원래 기능으로 복귀

배열의 각 요소가 확장된(독자적인) 기능을 사용하기 위해서는 원래의 클래스 형태로 명시적 형변환이 이루어져야 함. 

반복적으로 처리되는 과정에서 몇번째 요소가 어떤 클래스에서 최초로 생성되었는지 판단하기 어려움. 

 

instanceof 연산자 : 어떤 객체에 대한 출처를 판단하여 boolean형으로 결과 반환.

 

*반복문 사용 가능, 배열에 속해있는 모든 객체들에 대해 명시적 형변환 처리 가능

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package Object_Arr;
 
public class Main01 {
 
    public static void main(String[] args) {
        
        /*
         * 부모 클래스에 대한 객체 배열을 생성하고, 
         * 배열의 요소에 자식 클래스 객체를 할당하면,
         * 자동으로 암묵적 형변환이 이루어져 
         * 순서나 종류에 상관없이 배열에 저장 가능. 
         */
        
        //부대 지정
        Unit[] units = new Unit[5];
        units[0] = new AirForce("공군1호");
        //이런식으로 부대 지정 가능.
        
        //부대 일괄 공격
        /*
         * 각각의 객체가 유닛을 상속한 이후에 독립적으로 추가한 기능을 사용하기 위해서는
         * 원래의 클래스 형태로 명시적 형변환을 처리. 
         * 이때 원래의 클래스를 판별하기 위해서 instanceof 연산자를 사용 
         */
        for (int i = 0 ; i<units.length; i++) {
            units[i].attack();
            
            if (units[i] instanceof Army) {
                Army a = (Army)units[i];
                a.tank();
            } else if (units[i] instanceof Navy) {
                Navy n = (Navy)units[i];
                n.nucleus();
            } else {
                AirForce f = (AirForce)units[i];
                f.bombing();
            }
        }
 
    }
 
}
 
Colored by Color Scripter
cs

 

추상화

특정 클래스를 상속받은 경우, 부모의 특정 메서드를 무조건 재정의하도록 강제. 

 

상속성 : 객체간의 공통적인 기능을 관리하기 위한 기법

코드의 재사용을 통하여 프로그램 유지보수 편리하게 만듦.

다형성(오버라이드/오버로드) 서로 다른 기능이지만 메서드의 이름을 공통되게 처리 -> 전체 프로그램의 일관성 유지 

 

@Override 키워드를 사용하지 않고 메서드를 재정의하는 과정에서 이름에 실수가 있어도 에러가 아닌 새로운 메서드의 정의로 인식함. 따라서 의도치않은 실행결과 초래 가능

@Override 키워드를 사용하더라도 자식 클래스를 구현하는 실수로 인하여 부모의 기능을 재정의하지 않았다면 다형성 구현 실패. 

 

상속 처리 시, Override 강제하기

특정 메소드 재정의를 강제함-> 자식 클래스 작성 위한 가이드 완성. 

설계도를 소스코드 형태로 제시한다고 생각하면 편함. 

 

추상 메서드

abstract 키워드 사용하여 메서드 정의

가이드라인 제시가 주 목적, 따라서 선언만 가능하고 구현부 없음. 

추상 메서드를 한 이상 포함하고 있는 클래스는 반드시 추상 클래스로 정의되어야 함.   

'Language > JAVA' 카테고리의 다른 글

객체 배열  (0) 2021.09.28
Constructor & Overloading  (0) 2021.09.28
다형성(오버라이드,오버로드)/객체 형변환/암묵적 형변환  (0) 2021.08.08
클래스, getter그리고setter, 접근한정자  (0) 2021.08.01
Constructor  (0) 2021.07.29
    'Language/JAVA' 카테고리의 다른 글
    • 객체 배열
    • Constructor & Overloading
    • 다형성(오버라이드,오버로드)/객체 형변환/암묵적 형변환
    • 클래스, getter그리고setter, 접근한정자
    yeahzzz
    yeahzzz

    티스토리툴바