자바

JAVA STEP 31. abstract&Object&Generic

2023. 2. 22. 14:33
728x90

★ 클래스 종류

  1. 클래스
  2. 인터페이스
  3. 추상 클래스
  4. enum
  5. 제네릭 클래스
  6. Object

3. 추상 클래스

  • 구현 멤버를 가질 수 있다 > 일반 클래스의 성질
  • 추상 멤버를 가질 수 있다. > 인터페이스의 성질
  • 추상 메소드
    • 추상클래스 내에서 작성하는 추상메소드 표기법
    • public abstract void typing(String txt);
    • 실제 존재하는 멤버를 가질 수 없다.
    • 행동의 제약
    • 소스코드
    •  
abstract class Keyboard{
	
	public int price;
	public int weight;
	
	public void test() {
		System.out.println("test");
	}
	
	//void typing(String txt); //인터페이스내에서만 작성하는 추상메소드 표기법
	
	//추상메소드
	public abstract void typing(String txt); 
	//추상 클래스 내에서만 작성하는 추상메소드 표기법
	//둘다 하는일은 똑같음
}


/*
interface Keyboard{

	//실제 존재하는 멤버를 가질수 없다.
	//public int price;
	//public int weight;
	
	
	//행동의 제약
	void typing(String txt);
}
*/


//키보드
class K810 extends Keyboard{ // 인터페이스 상속 > 인터페이스 구현
	public String color;
	public int price;
	public int weight;
	
	public void typing(String txt)	{
		
	}
}

//class K380 extends Keyboard{
//	
//	public int price;
//	public int weight;
//	public int size;
//	
//	public void keydown(String txt) {
//		
//	}
//	
//}
  • 상속
  • 1. 클래스
  • 2. 인터페이스
  • 3. 추상클래스
  •  
			부모    <-     자식
			클래스		  클래스 : O
			인터페이스    클래스 : O (상속된 추상 클래스를 자식이 구현해야한다)
			추상클래스	 클래스 : O (구현멤버는 그대로 상속받고 추상멤버는 구현한다.)
			인터페이스	 인터페이스: O
			추상클래스    추상클래스 : O
			
			인터페이스 	 추상클래스
			추상클래스    인터페이스
			클래스       인터페이스
			클래스       추상클래스
  • 소스코드
  •  
interface AAA{
	void aaa(); // 추상
}

abstract class BBB{
	public int b; // 구현
	public abstract void bbb(); // 추상
}

abstract class FFF extends BBB{
	public int f; //본인 멤버
	
	public void bbb() {
		
	}
}

class CCC{
	public int c;
}

interface DDD extends AAA{
	void ddd();
}

class EEE implements DDD{
	public void ddd() {
		
	}
	
	public void aaa() {
		
	}
}

 

4. enum

  • 열거형(Enumeration)
  • 여러개 값을 가지고 있는 자료형 > 객관식(선택형)
  • 예제 1) 주관식
  •  
String color = "빨강";
		
if(color.equals("빨강") || color.equals("노랑") || color.equals("파랑")) {
	System.out.println("판매 가능");
}else {
	System.out.println("재고 없음");
}
  • 예제 2) 객관식
  •  
//Case 2. 객관식
		int input = Color.RED;
		
		//Color.RED = 5; 고유한 번호 Final을 변경하려고 했기 때문에 오류 발생
		
		if(input==0 || input==1 || input == 2) {
			System.out.println("판매 가능");
		}else {
			System.out.println("재고 없음");
		}
class Color {
	public final static int RED = 0;
	public final static int YELLOW = 1;
	public final static int BLUE = 2;
}
  • enum 사용
  •  
//Case 3. enum
		Colour input2 = Colour.RED;
		
		if(input2==Colour.RED || input2 == Colour.YELLOW || input2 == Colour.BLUE) {
			System.out.println("판매 가능");
		}else {
			System.out.println("재고 없음");
		}
		
		String gender = "남자";
		String gender2 = "f";
		
		Gender gender3 = Gender.MALE;
        
enum Colour {
	RED,	//final static 상수(정수)
	YELLOW,
	BLUE
}

 

4. Generic 

  • T : 타입 변수 : 자료형을 저장하는 변수 > 값형식은 불가능, 참조형식만 가능 
  • <> : 인자리스트
  • ex) class Item <T> {}
  • 소스코드
  •  
public static void main(String[] args) {
		
		//Item is a raw type. References to generic type Item<T> should be parameterized
		//Item item1 = new Item();
		
		Item<String> item2 = new Item<String>();
		item2.c = "홍길동";
		
		Item<Integer> item3 = new Item<Integer>();
		item3.c = 200;
		
		
		
		//Item<int> item4 = new Item<int>();
		//Item<double> item5;
		//Item<Double> item6;
		
		Pen<Boolean> p = new Pen<Boolean>();
		
		p.a = true;
		p.b = false;
		p.c = true;
		
		Desk<Double> d = new Desk<Double>();
		
		d.set(3.14);
		
		System.out.println(d.get() * 2);
		
		
		Cup<Integer, String> cup = new Cup<Integer, String>(100, "문자열");
		
		System.out.println(cup.getA());
		System.out.println(cup.getB());
		
	}//main

}//main class


//제네릭 클래스
//1. T 	: 타입 변수	> 자료형을 저장하는 변수 > 값형식은 불가능, 참조형식만 가능
//2. <> : 인자 리스트
class Item <T> { 
	
	public int a;
	public int b;
	public T c; //클래스 설계 당시에는 c의 자료형이 결정되지 않음 > (나중에) > 객체 생성할 때 결정
	
}

class Pen<T> {
	
	public T a;
	public T b;
	public T c;
	
}

class Desk<T> {
	
	public T a; //멤버 변수의 자료형
	
	public void set(T a) { //매개변수 자료형 
		this.a = a;
		
		T b; //지역변수 자료형 > 비권장(외부에 노출이 안되서.. 컨트롤이 힘들어진다.)
	}
	
	public T get() { //반환값 자료형
		return this.a;
	}
}

class Cup<T, U> {
	
	public T a;
	public U b;
	
	public Cup(T a, U b) {
		this.a = a;
		this.b = b;
	}
	
	public T getA() {
		return this.a;
	}
	
	public U getB() {
		return this.b;
	}
	
}

 

6. Object

  • 모든 클래스의 부모 클래스로, 루트 클래스라고 할 수 있다.
  • object를 이용한 다양한 타입의 변수 사용방법
  • 소스코드
public static void main(String[] args) {
		
		int n = 10;
		
		String s = "홍길동";
		
		AAAA a1 = new AAAA();
		
		AAAA a2 = new BBBB(); //업캐스팅
		
		AAAA a3 = new CCCC(); //업캐스팅
		
		//*** Object 변수는 모든 것을 담을 수 있는 만능 주머니이다. 
		//*** 값형 대상 > 박싱, 언박싱 발생
		//*** Object 변수안의 값이 어떤 타입인지를 확인하기 힘들다;; > 다운 캐스팅 오류 !!! 
		Object o1 = new Object();
		
		Object o2 = new AAAA(); //업캐스팅
		
		Object o3 = new BBBB();
		
		Object o4 = new CCCC();
		
		Object o5 = new Date();
		
		Object o6 = new Scanner(System.in);
		
		Object o7 = Calendar.getInstance();
		
		Object o8 = new BufferedReader(new InputStreamReader(System.in));
		
		//Object = int
		//참조형 = 값형
		//Object 변수에 값형의 값을 입출력 > 박싱/언박싱이 발생한다. > 비효율
		Object o9 = 10; //박싱(Boxing) > 10 자료형? > new Integer(10)
		System.out.println(o9.toString());
		//System.out.println(o9 * 2);
		System.out.println((Integer)o9 * 2); //정석, 언박싱(Unboxing)
		System.out.println((int)o9 * 2); 	 //서비스 문법
		
		//**** 값형 변수안에는 데이터만 저장 가능
		//**** 참조형 변수안에는 주소값만 저장 가능
		
		int n1 = 10; 				  //값형
		Integer n2 = new Integer(20); //참조형
		
		System.out.println(n2 * 2);
		
		//원래 타입으로 형변환
		Scanner scan = (Scanner)o3;
		
	
	}//main

}//main class


class AAAA {
	public String name;
}

class BBBB extends AAAA {
	public int age;
}

class CCCC extends BBBB {
	public String address;
}

★ 클래스 설계 : 다양한 방법을 이용한 멤버 변수 선언 방법

  • 요구사항 : 멤버 변수를 중심으로 여러가지 행동을 하는 메소드 선언
  • 멤버 변수 선언 > int
  • 추가사항] boolean을 중심으로 하는 클래스 추가 설계
  • 추가사항] String을 중심으로 하는 클래스 추가 설계

 

  • 방법 1.  일일이 다 생성해주는 방법
  • 소스코드
		WrapperInt n1 = new WrapperInt(10);
		
		System.out.println(n1.getData());
		System.out.println(n1.getData()*2);
		System.out.println(n1.toString());
		System.out.println();
        
		WrapperString s1 = new WrapperString("홍길동");
		
		System.out.println(s1.getData());
		System.out.println(s1.getData().length());
		System.out.println(s1.toString());
		System.out.println();

		WrapperBoolean b1 = new WrapperBoolean(true);
		
		System.out.println(b1.getData());
		System.out.println(b1.getData() ? "참" : "거짓");
		System.out.println(b1.toString());
		System.out.println();
        
class WrapperInt {
	
	private int data; //클래스 중심이 되는 데이터

	public WrapperInt(int data) {
		this.data = data;
	}

	public int getData() {
		return data;
	}

	public void setData(int data) {
		this.data = data;
	}
	
	@Override
	public String toString() {
		
		return "data = " + this.data;
	}
	
}

class WrapperString {
	
	private String data; //클래스 중심이 되는 데이터

	public WrapperString(String data) {
		this.data = data;
	}

	public String getData() {
		return data;
	}

	public void setData(String data) {
		this.data = data;
	}
	
	@Override
	public String toString() {
		
		return "data = " + this.data;
	}
	
}

class WrapperBoolean {
	
	private boolean data; //클래스 중심이 되는 데이터

	public WrapperBoolean(boolean data) {
		this.data = data;
	}

	public boolean getData() {
		return data;
	}

	public void setData(boolean data) {
		this.data = data;
	}
	
	@Override
	public String toString() {
		
		return "data = " + this.data;
	}
	
}

 

  • 방법 2. Object 클래스 사용
  • 소스코드
  •  
		WrapperObject n2 = new WrapperObject(20);
		
		System.out.println(n2.getData());
		System.out.println((Integer)n2.getData()*2);
		System.out.println(n2.toString());
		System.out.println();
        
        WrapperString s2 = new WrapperString("아무개");
		
		System.out.println(s2.getData());
		System.out.println(((String)s2.getData()).length());
		System.out.println(s2.toString());
		System.out.println();
        
        WrapperObject b2 = new WrapperObject(false);
		
		System.out.println(b2.getData());
		System.out.println((Boolean)b2.getData() ? "참" : "거짓");
		System.out.println(b2.toString());
		System.out.println();
        
        class WrapperObject {
	
	private Object data;

	public WrapperObject(Object data) {
		this.data = data;
	}

	public Object getData() {
		return data;
	}

	public void setData(Object data) {
		this.data = data;
	}
	
	public String toString() {
		return "data = " + data; 
	}
	
	
}

 

  • 방법 3. Generic 사용
  • 소스코드
  •  
		Wrapper <Integer> n3 = new Wrapper <Integer> (30);
		
		System.out.println(n3.getData());
		System.out.println(n3.getData()*2);
		System.out.println(n3.toString());
		System.out.println();
        
       	Wrapper <String> s3 = new Wrapper <String> ("이클립스");
		
		System.out.println(s3.getData());
		System.out.println(s3.getData().length());
		System.out.println(s3.toString());
		System.out.println();
        
       	Wrapper <Boolean> b3 = new Wrapper<Boolean> (true);
		
		System.out.println(b3.getData());
		System.out.println(b3.getData() ? "참" : "거짓");
		System.out.println(b3.toString());
		System.out.println();
        
        class Wrapper<T> {
	
	private T data;
	
	public Wrapper(T data) {
		this.setData(data);
	} //생성자는 딱 한번만 호출 

	public T getData() {
		return data;
	}// 값을 다시 전달해주는 역할

	public void setData(T data) {
		this.data = data;
	}// 사용자에게 값을 받아다가 여기 변수에다가 넣어주는 역할
	
	@Override
	public String toString() {
		return "data = " + data;
	}
}

 

728x90
저작자표시 비영리 변경금지 (새창열림)

'자바' 카테고리의 다른 글

JAVA STEP 33. ArrayList 직접 구현하기  (0) 2023.02.23
JAVA STEP 32. 컬렉션(ArrayList)  (0) 2023.02.23
JAVA STEP 30. Interface  (0) 2023.02.21
JAVA STEP 29. CASTING  (0) 2023.02.21
JAVA STEP 28. 상속, Static 예제  (0) 2023.02.20
'자바' 카테고리의 다른 글
  • JAVA STEP 33. ArrayList 직접 구현하기
  • JAVA STEP 32. 컬렉션(ArrayList)
  • JAVA STEP 30. Interface
  • JAVA STEP 29. CASTING
IT의 큰손
IT의 큰손
IT계의 큰손이 되고 싶은 개린이의 Log 일지
IT의 큰손
Developer Story House
IT의 큰손
전체
오늘
어제
  • 분류 전체보기 (457)
    • 정보처리기사 필기 (18)
    • 정보처리기사 실기 (12)
    • 정보처리기사 통합 QUIZ (12)
    • 빅데이터 (11)
    • 안드로이드 (11)
    • 웹페이지 (108)
    • 자바 (49)
    • SQLD (3)
    • 백준 알고리즘 (76)
    • 데이터베이스 (41)
    • 깃허브 (2)
    • Library (14)
    • Server (31)
    • 크롤링&스크래핑 (3)
    • Spring (23)
    • Vue.js (13)
    • React (27)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • Developer Stroy House

인기 글

태그

  • html
  • 웹개발자
  • 정보보안전문가
  • jquery
  • java
  • IT개발자
  • 웹개발
  • React
  • 백준
  • 코딩테스트
  • 웹페이지
  • 데이터베이스
  • 정보처리기사
  • 개발블로그
  • 프론트엔드
  • DBA
  • DB
  • 정보처리기사필기
  • 자바
  • 알고리즘
  • IT자격증
  • jsp
  • 백엔드
  • ajax
  • 개발자
  • it
  • css
  • IT자격증공부
  • JavaScript
  • 앱개발자

최근 댓글

최근 글

Designed By hELLO
IT의 큰손
JAVA STEP 31. abstract&Object&Generic
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.