3/25 개념 공부 및 문제
about. What I learned/about.Gudi

3/25 개념 공부 및 문제

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