abstract (추상화) - 반제품(Do It yourself)
package Test;
public class Test16 extends Test16a{
// 16a를 상속 받았다. 하지만 부모 클래스가 추상 클래스 임으로 재정의(오버라이딩)해야하는 메서드가 존재한다.
// 아래의 과정을 통해 하나의 메서드를 재정의 했지만 여전히 2개의 추상메서드 중 하나는 재정의 되지 못하고있다.
// 따라서 현재 클레스 파일에서 나머지 하나의 메서드를 재정의 하지 않는다면.
// 이 클래스 또한 추상 클래스라는 것을 표시해주어야한다.
@Override
public void a() {
// TODO Auto-generated method stub
}
}
package Test;
public abstract class Test16a { // 추상 메서드가 있는 클래스 입니다를 명시적으로 알림.
public void test() {
System.out.println("테스트 중입니다.");
}
public abstract void a(); // 변수가 필요없는 추상 메서드
public abstract void b(int need); //메서드를 재정의 할때 need 변수를 꼭 써야한다는 이야기
// 이렇게 클래스 안에 추상메서드가 있는경우 해당 추상 메서드의 기능이 무엇인지.
// 주석처리를 통해 명시적으로 알릴 필요가 있음.
}
추상 클래스 : 추상메서드가 존재하는 클래스
주의 : 추상 클래스는 미완성이기때문에 객체 생성이 불가능하다!!
추상 메서드 : 내용이 정의되어 있지 않음
- 필요한 객체의 설계도를 러프하게 작성하여 다른 사람이 객체를 생성하여 사용할때 조금 더 쉽게 사용할 수 있도록 하는 것. -
상속이 자식 클래스를 만드는데 부모클래스를 사용하는 것이라면, 추상화는 기존 클래스들의 공통부분을 뽑아내서 부모 클래스를 만들고 그것을 활용하여 여러개의 자식 클래스를 만드는 것이다.
package practice;
public abstract class unit { // 모든 유닛에 공통적으로 들어가는 요소들을 추상 클래스에 모았다.
int x,y;
abstract void move(int x, int y);
void stop() {
// 현재위치 고정
}
}
class Marine extends unit{ // 그리고 그 추상클래스를 상속받아서 정의되지 않은 메서드를 재정의 해서 사
void move(int x, int y) {
}
void stimPack() {}
}
class Tank extends unit{ // 똑같이 탱크에 맞는 기능들을 추가시켜 재정의 시킨다.
void move(int x, int y) {
}
void changeMode() {}
}
class Dropship extends unit{ //
void move(int x, int y) {}
void load() {}
void unload() {}
}
패키지
package 패키지명;
- 클래스 파일들을 찾고 이용하기 쉽게 용도에 따라 저장하기 위한 하나의 파일과 같다.
- 패키지는 소스파일의 첫번째 문장으로 단 한번만 선언된다.
- 패키지 선언이 없으면 이름없는 패키지에 속하게 된다.
import문(ctrl + shift + o)
다른 패키지의 클래스를 사용하려면 패키지명이 포함된 클래스 이름을 사용해야한다. 하지만 매번 패키지명을 붙여서 작성하기란 여간 번거러운 일이 아니다. import문을 작성하여 사용하려하는 클래스가 포한된 패키지 명을 명시해주면 컴퓨터가 컴파일 할 시기에 자동으로 해당 클래스에 패키지명을 붙여준다 그것도 자동으로 말이다. 이 얼마나 편리한가.
선언 방식은 이러하다.( 두방식의 성능 차이는 전혀없다.)
- import 패키지명.클래스명; 사용할 클래스를 직접적으로 명시해주는것.
- import 패키지명.*; 사용할 클래스가 포함된 패키지 전체를 확인하여 찾는것.
접근 제어자 및 캡슐화
접근제어자
public > protect>(default)>private
제어자 | 같은클래스 | 같은 패키지 | 자손클래스(다른패키지) | 전체 |
public 접근제한 없음 |
0 | 0 | 0 | 0 |
protected 같은 패키지 와 자손클래스 |
0 | 0 | 0 | |
(default) | 0 | 0 | ||
private 같은 클래스 |
0 |
default : 가장기본적인 접근제어자이며, 별도의 접근제어자를 입력하지않을시 적용되는 접근제어자이다.
(같은 패키지에서는 접근 가능)
public : 모든 접근이 가능하며, 제한이없다. [ main class 에서만 public 을 붙일수있다. ]
(다른 패키지에서도 접근 가능)
protected : 동일패키지에 속하는 클래스와 하위클래스 관계에서 접근가능하다. [ 현업에서는 거의 사용하지않는다. ]
(같은 패키지에서는 접근 가능)
private : 동일한 클래스 내에서만 접근이 가능하다. [ 개발자들끼리의 주의를 위해 사용하는 접근제어자이다. ]
(선언된 영역에서만 접근 가능)
getter() : public 제어자를 붙여서 다른 클래스 혹은 패키지 에서도 private 변수에 접근할 수 있도록 해준다.
(데이터가져오기)
setter() : 데이터 변경을 목적으로 한다.
캡슐화(getter 와 setter)
Bean = DTO = VO
package com.gd.test.bean;
public class TestBean {
private int no;
private String name;
private int age;
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}

'about. What I learned > about.Gudi' 카테고리의 다른 글
HTML 1일차 (0) | 2021.04.21 |
---|---|
4/9일 새로운 이야기 - DataBase(feat.Oracle) (0) | 2021.04.11 |
향상된 for 문에 대하여 (0) | 2021.04.01 |
3/26 개념 및 암기할 것들 (0) | 2021.03.31 |
3/26 Fri_2weeks. (0) | 2021.03.26 |