728x90

[조건]

<카페 메뉴>
아메리카노 1000원
라떼 2000원
우유 1500원
초코라떼 3500원

<대기 손님 수 5명>
이름 : 대기번호
김자바 : 1번
이자바 : 2번
박자바 : 3번
송자바 : 4번
오자바 : 5번

 

[차근 차근 생각해보기]

  1. 메뉴판은 순서가 보장된 LinkedHashMap으로 키와 값을 넣어 준다.
  2. 반복문을 통해 키와 값을 동시에 출력해주기
  3. 손님의 정보를 담기 위한 User 클래스를 만들기 (이름과 대기번호의 정보가 들어있다.)
  4. 순서가 보장된 LinkedList로 값을 넣어주기(User 클래스의 객체로 정보를 넣어준다.)
  5. 반복을 돌면서 값 출력해주기

 

[코드]

<손님 클래스>

public class User {
    private String name;
    private int num;

    public User(String name, int num) {
        this.name = name;
        this.num = num;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }
}

 

<main클래스>

public static void main(String[] args) {

    LinkedHashMap<String, Integer> menu = new LinkedHashMap<>();
    menu.put("아메리카노", 1000);
    menu.put("라떼", 2000);
    menu.put("우유", 1500);
    menu.put("초코라떼", 3500);

    System.out.println("DDONY 카페 메뉴");
    System.out.println("------------------");

    for (String key : menu.keySet()) {
        System.out.println(key + " " + menu.get(key) + "원");
    }

    LinkedList<User> user = new LinkedList<>();
    user.add(new User("김자바", 1));
    user.add(new User("이자바", 2));
    user.add(new User("박자바", 3));
    user.add(new User("송자바", 4));
    user.add(new User("오자바", 5));

    System.out.println();
    System.out.println("오늘의 총 대기 고객 수 : " + user.size());
    System.out.println("카페 영업 시작합니다. ^0^");
    System.out.println();


    for (User u : user) {
        System.out.println("대기번호 " + u.getNum() + "번 " + u.getName() + " 손님 음료 준비 되었습니다.");
        System.out.println("픽업 완료 되었습니다. 감사합니다 ^0^");
        System.out.println();
    }

    System.out.println("오늘의 영업이 종료 되었습니다.");

}

 

<실행 결과>

 

 

[반성할 점]

최대한 다양한 컬렉션 프레임워크를 사용하고 싶어 map과 List를 사용해보았다.

메뉴판을 구현하는데에는 큰 어려움이 없었다. 

하지만 손님을 구현하는데 이름과 대기번호를 구현하는데 있어 너무 어려워 그냥 map으로 구현해야하나 싶었다..

 

조언을 구해본 결과 손님 클래스를 만들어 손님 정보를 만들어 주는게 맞는 방법이라고 하여 손님 클래스에 이름과 대기번호의 정보가 담길 수 있도록 만들어주었다. 그리고 add메서드에 User객체를 넣어 값을 넣어주었다.

 

손님이 음료를 픽업하고 나면 리스트에서 삭제를 해주고 싶었는데 remove()를 하니 아래와 같은 오류가 나서 그냥 remove는 빼고 구현하였다. 

다음엔 조금 더 기술을 첨가하여 제대로 된 커피숍 프로그램을 만들어봐야겠다.

 

직접 문제를 생각하고 구현해본 방식이라 어설픈게 많지만 이런식으로 여러가지 기술을 활용하여 프로그램을 몇개 만들어보아야겠다.

728x90

'Java' 카테고리의 다른 글

람다식(Lambda)  (0) 2023.06.13
익명 클래스  (0) 2023.06.13
[Collection 프레임워크] - Iterator  (0) 2023.06.12
[Collection 프레임워크] - HashMap  (0) 2023.06.12
[Collection 프레임워크] - HashSet  (0) 2023.06.12
728x90

[Iterator]

  • List / Set 과 같은 것을 순회 할 때 사용한다.
  • 처음으로 커서를 옮긴 후, 다음 한칸씩 이동 하면서 커서 위치에 있는 데이터를 가져온다.
  • 데이터를 순회하면서 필요 없는 데이터가 발견되면 그 자리에서 삭제도 가능하다.
  • 다만 단방향의 반복만가능하고 값을 변경하거나 추가가 불가능 하다는 단점이 있다.       

[Iterator 선언 방법]

public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    list.add("자바");
    list.add("파이썬");

    Iterator<String> itertator = list.iterator();
}

 

[Iterator의 3가지 함수 ]

public static void main(String[] args) {
    List<String> list = new ArrayList<>();
    list.add("자바");
    list.add("X");
    list.add("파이썬");

    Iterator<String> iterator = list.iterator();

    while(iterator.hasNext()){
        String s = iterator.next();
        if (s.contains("X")) {
            iterator.remove(); // 해당 커서에 위치하는 데이터 삭제 
        }
    }

    iterator = list.iterator(); // 커서를 맨 처음으로 이동
    while(iterator.hasNext()){
        System.out.println(iterator.next()); // 다음 데이터로 이동
    }

    
}
  • iterator()를 사용하여 커서를 맨 처음으로 이동시킬 수 있다. 
  • hasNext()를 사용하여 Iterator안에 값이 있는지 확인할 수 있다.
  • remove()를 사용하여 해당 커서에 위치하는 데이터를 삭제할 수 있다.    
728x90

'Java' 카테고리의 다른 글

익명 클래스  (0) 2023.06.13
커피 가게 프로그램 만들기  (0) 2023.06.12
[Collection 프레임워크] - HashMap  (0) 2023.06.12
[Collection 프레임워크] - HashSet  (0) 2023.06.12
[Collection 프레임워크] - LinkedList  (0) 2023.06.12
728x90

[HashMap]

  • HashMap은 Map인터페이스에 속해있는 컬렉션이다. 
  • 데이터는 (Key, Value)인 1:1 구조로 이루어져 있다.  
  • 키는 고유한 속성이지만 값은 고유한 속성이 아니다.
  • 그래서 같은 키의 값을 삽입하려고 하면 해당 키의 값이 변경 된다.
  • 키는 중복이 되지 않고, 값은 중복이 될 수 있다. (null 값도 저장 가능) 

[HashMap선언 방법]

public static void main(String[] args) {
    HashMap<String, Integer> map = new HashMap<>();
    HashMap<String, String> map = new HashMap<>();
}
  •   HashMap<데이터 타입, 데이터 타입> 변수명 = new HashMap<>()으로 선언할 수 있다.  

 

[HashMap데이터 추가]

public static void main(String[] args) {
    HashMap<String, Integer> map = new HashMap<>();

    // 데이터 추가
    map.put("아메리카노", 3000);
    map.put("라떼", 4000);
}
  • put(key, value)를 사용하여 값을 추가할 수 있다.
  • 선언한 타입에 맞는 데이터만 추가할 수 있다.
  • 같은 키의 값을 추가 한다면 마지막에 넣은 vlaue로 변경된다.   

 

[HashMap데이터 조회]

public static void main(String[] args) {
    HashMap<String, Integer> map = new HashMap<>();

    // 데이터 추가
    map.put("아메리카노", 3000);
    map.put("라떼", 4000);
    
    System.out.println("아메리카노의 가격 : " + map.get("아메리카노"));
    System.out.println("라떼의 가격 : " + map.get("라떼"));
    
    // Key 확인
    for (String key : map.keySet()) {
        System.out.println(key);
    }

    // Value 확인
    for (int value : map.values()) {
        System.out.println(value);
    }
    
    // 키와 값 동시에 확인하기
    for (String key : map.keySet()) {
        System.out.println("키 : " + key + "값 : " + map.get(key));
    }
}
  • get(key)를 입력하면 key에 맞는 value가 출력 된다.
  • keyset(), values()를 사용하여 key와 vlaue를 확인 할 수 있다.

 

[HashMap데이터 삭제]

public static void main(String[] args) {
    HashMap<String, Integer> map = new HashMap<>();

    // 데이터 추가
    map.put("아메리카노", 3000);
    map.put("라떼", 4000);
    
    // 데이터 삭제
    map.remove("아메리카노");
    map.clear();
}
  • remove(key)로 key를 삭제할 수 있다.
  • clear()를 사용하여모든 키값들을 삭제할 수 있다.  

 

[HashMap크기 구하기]

public static void main(String[] args) {
    HashMap<String, Integer> map = new HashMap<>();

    // 데이터 추가
    map.put("아메리카노", 3000);
    map.put("라떼", 4000);
    
    // 크기 구하기
    System.out.println(map.size());
}
  • size()를 사용하여 크기를 구할 수 있다.
728x90
728x90

[HashSet]

HashSet은 Set 인터페이스에서 지원하는 구현 클래스이다.

HashSet의 특징은 중복을 허용하지 않고, 자동으로 중복 데이터를 제거할 수 있다.

또, 순서도 보장 되지 않는다는 특징이 있고, null도 허용한다.

 

💡순서를 보장하고 싶다면 LinkedHashSet을 사용하면 된다.  

 

[HashSet선언 방법]

public static void main(String[] args) {
	HashSet<String> set = new HashSet<>();
}
  • HashSet<데이터 타입> 변수명 = new HashSet<>()으로 선언할 수 있다.  

 

[HashSet데이터 추가]

public static void main(String[] args) {
    HashSet<String> set = new HashSet<>();

    // 데이터 추가
    set.add("자바");
    set.add("파이썬");
}
  • add()를 사용하여 값을 추가할 수 있다.
  • 지정한 타입에 맞  데이터만 추가할 수 있다.    

 

[HashSet데이터 조회]

public static void main(String[] args) {
    HashSet<String> set = new HashSet<>();

    // 데이터 추가
    set.add("자바");
    set.add("파이썬");

    // 데이터 조회
    Sysetm.out.println(set);
    for(String s : set){
        Sysetm.out.println(s);
    }
}
  • 단순 출력문을 이용하여 데이터를 출력할 수 있다. = > 결과 : [자바, 파이썬] 
  • 반복문을 이용하여 데이터를 조회할 수 있다. 

 

[HashSet데이터 삭제]

public static void main(String[] args) {
    HashSet<String> set = new HashSet<>();

    // 데이터 추가
    set.add("자바");
    set.add("파이썬");

    // 데이터 삭제
    set.remove("파이썬");
    set.clear();
}
  • remove(value)로 값을 직접 입력하여 삭제할 수 있다.
  • clear()를 사용하여 값 전체를 삭제할 수 있다.  

 

[HashSet데이터 검색하기]

public static void main(String[] args) {
    HashSet<String> set = new HashSet<>();

    // 데이터 추가
    set.add("자바");
    set.add("파이썬");

    // 데이터 검색
    if(list.contains("자바")){
        System.out.println("글자 검색하기");
    }
}
  • contains()를 사용하여 원하는 데이터를 검색할 수 있다. 

 

[HashSet크기 구하기]

public static void main(String[] args) {
    HashSet<String> set = new HashSet<>();

    // 데이터 추가
    set.add("자바");
    set.add("파이썬");

    // 크기 구하기
    System.out.println(set.size());
 }
  • size()를 사용하여 해당 리스트의 크기를 구할 수 있다.

 

728x90
728x90

[LinkedList]

  • ArrayLsit와는 다르게 각각의 노드를 연결하는 방식을 사용한다.
    • 여기서 노드란 실제로 데이터가 저장되는 그릇과 같은 것
  • 데이터를 삭제하고 추가하는 것이 용이하다.
  • 위치에 상관 없이 데이터를 삭제 및 추가 하는데 변경되는 노드만 연결해주면 된다.
  • ArrayList는 검색이 많은 경우에 사용되고, LinkedList는 데이터의 추가 / 삭제가 많을 경우 사용된다. 

(예시) 의자 없이 사람들이 손을 잡고 있는데 중간에 사람이 들어가려하면 잡고 있던 손을 놓고 그 자리로 들어갈 수 있다.

 

[LinkedList선언 방법]

 public static void main(String[] args) {
    LinkedList<String> list = new LinkedList<>();
 }
  • <> 안에는 Integer, String, Character, Student, Phone 등과 같은 다양한 타입이 들어 올 수 있다.  

[LinkedList데이터 추가]

 public static void main(String[] args) {
    LinkedList<String> list = new LinkedList<>();
    
    // 데이터 추가
    list.add("자바");
    list.add("파이썬");
    list.addFrist("C언어");
    list.addLast("자바스크립트");
 }
  • add(Object)를 사용하여 인덱스 마지막에 데이터를 추가한다.
  • add(Object, index)를 사용하여 지정한 인덱스에 값을 추가할 수 있다. 
  • addFirst()를 사용하여 첫번째에 데이터를 추가할 수 있다.
  • addLast()를 사용하여 마지막에 데이터를 추가할 수 있다. 

 

[LinkedList데이터 조회]

 public static void main(String[] args) {
    LinkedList<String> list = new LinkedList<>();

    // 데이터 추가
    list.add("자바");
    list.add("파이썬");

    // 데이터 조회
    System.out.println(list.get(0));
    System.out.println(list.get(1));
    System.out.println(list.getFirst());
    System.out.println(list.getLast());
 }
  • get(index)를 사용하여 해당 인덱스의 데이터를 조회할 수 있다. 
  • getFrist()를 사용하여 첫번째 데이터를 조회할 수 있다.
  • getLast()를 사용하여 마지막 데이터를 조회할 수 있다.  
  • 반복문을 사용하여 해당 인덱스 혹은 전체 데이터를 조회할 수 있다.

 

[LinkedList데이터 삭제]

 public static void main(String[] args) {
    LinkedList<String> list = new LinkedList<>();

    // 데이터 추가
    list.add(1);
    list.add(2);

    // 데이터 삭제
    list.remove(1);
    list.clear();
    list.removeFirst(); // 처음 데이터
    list.removeLast(); // 마지막 데이터
 }
  • remove()를 사용하여 인덱스 혹은 값을 직접 입력하여 삭제할 수 있다.
  • removeFirst()를 사용하여 처음 데이터를 삭제할 수 있다.
  • removeLast()를 사용하여 마지막 데이터를 삭제할 수 있다.       
  • clear()를 사용하여 값 전체를 삭제할 수 있다.  

 

[LinkedList데이터 변경]

 public static void main(String[] args) {
    LinkedList<String> list = new LinkedList<>();
    
    // 데이터 추가
    list.add(1);
    list.add(2);

    // 데이터 변경
    list.set(0, 3);
    list.set(1, 5);
 }
  • set(index, Object)를 사용하여 값을 변경할 수 있다. 
  • 데이터를 변경하려면 해당 데이터의 인덱스를 알아야 한다. 

 

[LinkedList데이터 검색하기]

 public static void main(String[] args) {
    LinkedList<String> list = new LinkedList<>();

    // 데이터 추가
    list.add("자바");
    list.add("파이썬");

    // 데이터 검색
    if(list.contains("자바")){
        System.out.println("글자 검색하기");
    }
 }
  • contains()를 사용하여 원하는 데이터를 검색할 수 있다. 

 

[LinkedList 크기 구하기]

 public static void main(String[] args) {
    LinkedList<String> list = new LinkedList<>();

    // 데이터 추가
    list.add("자바");
    list.add("파이썬");

    // 크기 구하기
    System.out.println(list.size());
 }
  • size()를 사용하여 해당 리스트의 크기를 구할 수 있다.
728x90
728x90

[컬렉션 프레임워크]

  • 컬렉션 프레임 워크에는 List / set / map등의 인터페이스를 제공한다.
  • 많은 데이터를 쉽고 편리하고 효과적으로 관리하기 위에 자바에서 제공하는 클래스의 모음이다.

[ArrayList]

  • List 인터페이스에서 상속 받아 사용된다.
  • ArrayList는 객체가 추가 되면서 용량이 초과 되면 초과된 용량 만큼 길이가 늘어나게 된다.

(예시) 여러 명이 앉을 수 있는 의자에서 중간에 사람이 앉으려 하면 그 위치부터 모든 사람이 한칸씩 이동해주어야한다.

 

[ArrayList 선언 방법]

 public static void main(String[] args) {
    ArrayList<Integer> list = new ArrayList<>(); 
 }
  • <> 안에는 Integer, String, Character, Student, Phone 등과 같은 다양한 타입이 들어 올 수 있다.  

[ArrayList 데이터 추가]

 public static void main(String[] args) {
    ArrayList<Integer> list = new ArrayList<>(); 
    
    // 데이터 추가
    list.add(1);
    list.add(2);
 }
  • add(Object)를 사용하여 인덱스 마지막에 데이터를 추가한다.
  • add(Object, index)를 사용하여 지정한 인덱스에 값을 추가할 수 있다. 

 

[ArrayList 데이터 조회]

 public static void main(String[] args) {
    ArrayList<Integer> list = new ArrayList<>(); 

    // 데이터 추가
    list.add(1);
    list.add(2);

    // 데이터 조회
    System.out.println(list.get(0));
    System.out.println(list.get(1));
 }
  • get(index)를 사용하여 해당 인덱스의 데이터를 조회할 수 있다. 
  • 반복문을 사용하여 해당 인덱스 혹은 전체 데이터를 조회할 수 있다.   

 

[ArrayList 데이터 삭제]

 public static void main(String[] args) {
    ArrayList<Integer> list = new ArrayList<>(); 

    // 데이터 추가
    list.add(1);
    list.add(2);

    // 데이터 삭제
    list.remove(1);
    list.clear();
 }
  • remove(Object)를 사용하여 Object와 같은 값을 삭제한다.
  • clear()를 사용하여 값 전체를 삭제할 수 있다.  

 

[ArrayList 데이터 변경]

 public static void main(String[] args) {
    ArrayList<Integer> list = new ArrayList<>(); 

    // 데이터 추가
    list.add(1);
    list.add(2);

    // 데이터 변경
    list.set(0, 3);
    list.set(1, 5);
 }
  • set(index, Object)를 사용하여 값을 변경할 수 있다. 
  • 데이터를 변경하려면 해당 데이터의 인덱스를 알아야 한다. 

 

[ArrayList 데이터 검색하기]

 public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<>(); 

    // 데이터 추가
    list.add("자바");
    list.add("파이썬");

    // 데이터 검색
    if(list.contains("자바")){
        System.out.println("글자 검색하기");
    }
 }
  • contains(Object)를 사용하여 원하는 데이터를 검색할 수 있다. 

 

[ArrayList크기 구하기]

 public static void main(String[] args) {
    ArrayList<String> list = new ArrayList<>();

    // 데이터 추가
    list.add("자바");
    list.add("파이썬");

    // 크기 구하기
    System.out.println(list.size();
 }
  • list.size()를 사용하여 해당 리스트의 크기를 구할 수 있다.
728x90
728x90

[제네릭이란?]

- 다양한 타입의 객체를 지원하는클래스, 인터페이스 또는 메소드를 정의하는 방법

- 같은 동작을 하는 클래스나 메소드를 계속 구현할 필요 없이 한번 정의하면 여러 타입에서 사용가능 하다.

- 제네릭은 다양한 타입의 '객체'를 지원한다고 하였다. 즉, 기본 자료형은 제네릭 타입으로 사용 불가능하다.

- 기본 자료형을 사용하려면 Wrapper 클래스를 사용하면 된다.    

 

[제네릭의 장점]

1. 제네릭을 사용하면 잘못된 타입이 들어 오는 것을 컴파일 단계에서 방지할 수 있다.

2. 클래스 외부에서 타입을 지정해주기 때문에 따로 타입을 체크하고 변환해 줄 필요가 없다. 즉, 관리가 편리함.

3. 비슷한 코드를 구현할 경우 여러 타입에서 사용가능하기 때문에 재사용성이 높다.

 

[코드]

public static void main(String[] args){

Integer intArray = {1, 2, 3, 4, 5};
String stringArray = {"가", "나", "다"};

arr(intArray);
arr(stringArray);

}

private static <T> void arr(T[] arr){
    for(T type : arr){
        System.out.println(t);
    }
}
  • 위의 코드처럼 <T : Type, K : Key, V : Value, E : Element 등등 > 안에 타입을 지정해주면 된다. 
  • ArrayList<String>, List<T> 등등 이런 것들도 제네릭이다.  

[제네릭 클래스]

- 제네릭 클래스도 위에 설명한 제네릭과 같다.

 

아래 코드로 살펴보면 

 

[코드]

public static void main(String[] args) {
	
    FixPhone<String> fix = new FixPhone<>("홍길동");
    fix.come();
    
    FixPhone<Integer> fix2 = new FixPhone(1);
    fix.com();

}

public class FixPhone <T>{
    public T name; // 손님 이름

    public fixPhone(T name){
        this.name = name;
    }

    public void come(){
        System.out.println(name + " 고객님 차례가 되었습니다.);
    }
}

- 클래스 명 뒤에 <>로 타입을 지정하여 사용할 수 있다.

 

[Wrapper 클래스]

Wrapper 클래스는 기본 자료형을 객체 형태로 만들어 사용할 수 있도록 해주는 것이다.

기본자료형 Wrapper 클래스
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
void Void

 

728x90

'Java' 카테고리의 다른 글

[Collection 프레임워크] - LinkedList  (0) 2023.06.12
[Collection 프레임워크] - ArrayList  (0) 2023.06.12
인터페이스 - 놀이공원 티켓 구입하기  (0) 2023.06.08
인터페이스  (0) 2023.06.08
추상클래스  (0) 2023.06.08
728x90

[조건]

- 인터페이스를 이용하여 놀이공원 티켓 구입 하는 프로그램 만들기

 

public interface AmusementPark{
    void buyTicket();
}

public class TicketBox implements AmusementPark{
    @Override
    public void buyTicket(){
        System.out.println("티켓을 구입합니다.");
    }
}

public class Adult{
    private AmusementPark amusementPark;

    public void setAmusementPark(AmusementPark amusementPark){
        this.amusementPark = amusementPark;
    }

    public void price(){
        System.out.println("입장료는 50000원 입니다.");
    }

    public void buyTicket(){
       this.amusementPark.buyTicket();
    }
}
public static void main(String[] args){
    Adult adult = new Adult();
    adult.setAmusementPark(new TicketBox());
    adult.buyTicket();
}

// 실행 결과 => 티켓을 구입합니다.

 

[반성할 점]

아직 인터페이스에 대해 개념이 잘 안잡힌 것 같다.

조금 더 공부 후에 간단한 프로그램을 다시 만들어봐야할 것 같다.

728x90

'Java' 카테고리의 다른 글

[Collection 프레임워크] - ArrayList  (0) 2023.06.12
제네릭과 제네릭 클래스 / Wrapper 클래스  (0) 2023.06.12
인터페이스  (0) 2023.06.08
추상클래스  (0) 2023.06.08
클래스 - 샌드위치 만들기  (0) 2023.06.07
728x90
  • 기존의 클래스는 하나의 클래스만 상속 받을 수 있는 단일 상속의 특징을 갖고 있었지만
  • 인터페이스는 다중 상속이 가능하다.
  • 클래스들이 필수로 구현해야하는 추상 메서드와 상수만 사용가능하다.

즉, 추상 클래스는 미완성된 클래스라고 하면 인터페이스는 뼈대만 제공하는 클래스라고 할 수 있다.

 

지금부터 코드를 통해 인터페이스에 대해 공부해보자..!

public class Adult {
    public void buyTicket(){
        System.out.println("티켓을 구입합니다.");
    }
}

public class Child{
    public void buyTicket(){
    	System.out.println("티켓을 구입합니다.");
    }
}

두개의 클래스는 buyTicket을 하는 공통된 기능을 사용하고 있다. 

구현해야할 코드가 많아진다면 중복 되는 코드도 많아질 것이기 때문에

공통되는 'buyTicket'을 인터페이스로 만들 수 있다.

 

// 인터페이스
public interface BuyTicket{ 
    void buyTicket();
}

public class TicketBox implements BuyTicket{
    @Override
    public void buyTicket(){
        System.out.println("티켓을 구입합니다.");
    }
}

public static void main(String[] args){
    TicketBox ticketBox = new TicketBox();
    ticketBox.buyTicket();
}

// 실행 결과 => 티켓을 구입합니다.

위와 같이 동일한 기능을 하는 코드를 중복해서 사용하기 보다는

인터페이스를 통해 중복 코드를 줄일 수 있다.

728x90

'Java' 카테고리의 다른 글

제네릭과 제네릭 클래스 / Wrapper 클래스  (0) 2023.06.12
인터페이스 - 놀이공원 티켓 구입하기  (0) 2023.06.08
추상클래스  (0) 2023.06.08
클래스 - 샌드위치 만들기  (0) 2023.06.07
클래스 - 3  (0) 2023.06.07
728x90

1. 추상클래스

  • 추상 클래스는 아직 완성되지 않은 클래스라고 할 수 있다.
  • 추상 클래스는 객체를 생성할 수 없고, 추상 클래스를 상속한 자식 클래스만 객체를 생성 할 수 있다.
  • 추상 클래스에는 추상 메소드를 만들 수 있다.

2. 추상 메소드

  • 추상 클래스 혹은 인터페이스에서 사용 가능한 메소드이다.
  • 껍데기만 있는 메소드라고 할 수 있다.
  • 추상 메소드는 상속한 자식 클래스에서 반드시 구현해야한다.
public abstract class AmusementPark{ // 추상 클래스
    public void isChild(){
        System.out.println("어린이가 입장합니다.")
    }

    public void isAdult(){
        System.out.println("어른이 입장합니다.")
    }

    public abstract void price(); // 추상 메소드
    
}

public class AdultTicket extends AmusementPark{
    @Override
    public void price(){ // 추상 클래스를 상속 받은 자식은 반드시 추상 메소드를 구현해야함
        System.out.println("어른의 입장료는 50000원 입니다.");
    }
}

public class ChildTicket extends AmusementPark{
    @Override
    public void price(){
        System.out.println("어린이의 입장료는 30000원 입니다.");
    }
}

위와 같이 'abstract' 키워드를 사용하여 추상 클래스와 추상 메소드를 만들 수 있다.

public static void main(String[] args){

    // AmusmentPark amusementPark = new AmusementPark();처럼 추상 클래스는 객체 생성 불가
    AdultTicket adult = new AdultTicket();
    adult.price();

    ChildTicket child = new ChildTicket();
    child.price();
}

// 출력 결과 
// 어른의 입장료는 50000원 입니다.
// 어린이의 입장료는 30000원 입니다.

메인 메소드에서는 위와 같이 사용할 수 있다.

728x90

'Java' 카테고리의 다른 글

인터페이스 - 놀이공원 티켓 구입하기  (0) 2023.06.08
인터페이스  (0) 2023.06.08
클래스 - 샌드위치 만들기  (0) 2023.06.07
클래스 - 3  (0) 2023.06.07
클래스 - 2  (0) 2023.06.07

+ Recent posts