• 티스토리 홈
  • 프로필사진
    Song hyun
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
Song hyun
  • 프로필사진
    Song hyun
    • 분류 전체보기 (780)
      • 백준 (0)
      • 영어 (2)
        • Diary (0)
        • Toast Masters (2)
      • 메모 (13)
      • 설치 메뉴얼 (30)
      • Java (178)
      • MySQL (60)
      • JSP (67)
      • Springboot (46)
      • HTML,CSS, JS (71)
        • HTML (8)
        • CSS (12)
        • JavaScript (37)
        • HTML&CSS 스터디 (13)
      • C++ (7)
      • Linux (7)
      • JPA (34)
      • Kotlin (2)
      • Flutter (42)
      • Error Note (39)
      • 디자인 패턴 (12)
      • 디지털논리회로 (4)
      • 데이터베이스 시스템 (8)
      • 알고리즘 (7)
      • 운영체제 (3)
      • 이산수학 (3)
      • 인공지능 (1)
      • 자료 구조 (14)
        • 기본 개념 (14)
        • 자료구조 스터디 (0)
      • 💡My project (76)
        • 팩맨 : Java Swing 게임 제작 프로젝트 (6)
        • 네이트톡 : Java 소켓 통신 프로젝트 (4)
        • 포켓옥션 : HikariCP&JDBC CRUD 프.. (3)
        • 이지 부산 : BDIA-Devton 2024 프로.. (20)
        • 그린 유니버시티 : JSP를 사용한 학사관리 프로.. (1)
        • 애드 포커 : 웹 소켓과 Spring을 사용한 카.. (1)
        • 셸위 : 게임 친구 매칭 사이트 (21)
        • 다모아 : 개발자 중개 플랫폼 (20)
      • 📗스터디 (13)
        • CNN : 웹개발 스터디 (10)
        • Node&React로 유튜브 사이트 만들기 (3)
      • 📙독서 및 강연 기록 (36)
        • 강연 (14)
        • 독서 (22)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • [Java] 47. 추상 클래스 활용: 클래스 구현하기
        2024년 04월 24일
        • Song hyun
        • 작성자
        • 2024.04.24.:31
        728x90
        반응형

        [Java] 추상 클래스 활용: 클래스 구현하기

        위의 사진대로 추상 클래스와 메서드를 구현해보자.


        1. 분석하기

        (1) 위의 사진을 살펴보자. 자세히 보면 이탤릭체(기울어진 글씨체)인 클래스, 메서드 명이 있는 것을 알 수 있다.

        이탤릭체로 표시된 클래스/변수는 추상화되었음을 의미한다. 

         

        (2) 화살표는 상속을 의미한다. 가리켜지는 클래스가 부모 클래스이다.

        --> 추상 클래스인 Computer를 상속받는 클래스 DeskTop/NoteBook(추상 클래스), 그리고 NoteBook 클래스를 다시 상속받는 MyNoteBook 클래스가 있음을 알 수 있다.

         

         

        2. 클래스 파일 및 메서드 생성하기

        (1) 우선 가장 먼저 상속하는 클래스인 Computer 클래스를 생성한다. 

        이 때, 클래스 선언 부분에 abstract를 선언해 추상 클래스로 만든다.

         

        (2) 이제 Computer 클래스를 상속받는 DeskTop/NoteBook 클래스를 생성한다.

         

        (3) 구조도를 잘 보면, NoteBook 클래스만이 추상 클래스임을 알 수 있다. (이탤릭체 표기=추상 클래스)

        NoteBook 클래스는 (1)과 같이 abstract를 사용해 추상 클래스로 만든다.

         

        (4) DeskTop의 경우는 또 다른데, 추상 클래스를 상속받으면서도, 자식 클래스인 DeskTop은 추상화되지 않음을 알 수 있다. 이 경우에는 부모 클래스인 Computer 클래스의 메서드를 오버라이딩하면 해결된다.

         

        (5) NoteBook 클래스를 상속받는 MyNoteBook 역시 마찬가지이다. 추상 클래스를 상속받지만, 자기 자신은 추상화되지 않은 일반 클래스이다. 똑같이 NoteBook 클래스의 메서드들을 오버라이딩하면 해결된다!

         

         


        (1) 컴퓨터 클래스

        package basic.ch21;
        public abstract class Computer {
        	private String name;
        	
        	public abstract void display();
        	public abstract void typing();
        	
        	public void turnOn(){
        	}
        	public void turnOff() {
        		
        	}
        }

         

        (2) DeskTop 클래스

        package basic.ch21;
        import java.util.Scanner;
        import java.util.Random;
        public class DeskTop extends Computer {
        	
        	
        	
        	@Override
        	public void turnOn() {
        		System.out.println("데스크탑을 켭니다.");
        	}
        	@Override
        	public void turnOff() {
        		System.out.println("데스크탑을 끕니다.");
        	}
        	@Override
        	public void display() {
        		int mood=0;
        		boolean flag=true;
        		
        		while(flag) {
        			System.out.println("------------------");
        			System.out.println("메뉴를 선택해주세요.");
        			System.out.println("1. 인터넷 검색 | 2. 파일 구경하기");
        			Scanner sc=new Scanner(System.in);
        			Random random=new Random();
        			int choice=sc.nextInt();
        			
        			if(mood>=2) {
        				System.out.println("눈이 피곤하다. 잠시 쉬고 오자...");
        				break;
        			}
        			if(choice==1) {
        				System.out.println("당신은 인터넷 서핑을 했다.");
        				int a=random.nextInt(2);
        				if(a==0) {
        					System.out.println("이상한 글을 봐서 기분이 안 좋아졌다...");
        					mood++;
        				}
        				else {
        					System.out.println("앗! 시간이 어느새 2시간이나 지나가버렸다.");
        				}
        			}
        			else if(choice==2) {
        				System.out.println("당신은 데스크 탑 속의 파일들을 구경했다.");
        				int a=random.nextInt(2);
        				if(a==0) {
        					System.out.println("몇 년 전의 사진들을 보고 추억에 빠졌다.");
        				}
        				else {
        					System.out.println("언제 이런 사진들이 찍힌 거야!");
        					mood++;
        				}
        			}
        			else {
        				System.out.println("잘못된 입력입니다. 다시 입력해주세요.");
        			}
        		}	
        		}
        		
        	@Override
        	public void typing() {
        		System.out.println("오늘의 운세를 보시겠습니까?");
        		System.out.println("1. 네 | 2. 아니오");
        		Scanner sc=new Scanner(System.in);
        		int a=sc.nextInt();
        		if(a==1) {
        			Random random=new Random();
        			int aa=random.nextInt(3);
        			if(aa==0) {
        				System.out.println("운세는 대길! 아주 즐거운 하루가 될 것 같습니다.");
        			}
        			else if(aa==1) {
        				System.out.println("운세는 소길! 소소한 행복을 기대해 보세요.");
        			}
        			else if(aa==2) {
        				System.out.println("운세는 소흉! 사소한 실수가 잦을지도 모릅니다.");
        			}
        			else {
        				System.out.println("운세는 대흉! 오늘은 되도록 휴식하는게 좋겠습니다.");
        			}
        		}
        	}
        
        }

         

        (3) NoteBook 클래스

        package basic.ch21;
        
        public abstract class NoteBook extends Computer {
        	
        	public void typing() {
        	}
        }

         

        (4) MyNoteBook 클래스

        package basic.ch21;
        import java.util.Scanner;
        public class MyNoteBook extends NoteBook {
        	Scanner sc=new Scanner(System.in);
        	
        	@Override
        	public void display() {
        		System.out.println("화면이 꺼져 있다.");
        	}
        	
        	public void typing() {
        		System.out.println("오늘의 일기를 써보자.");
        		String diary=sc.nextLine();
        		System.out.println("-----------------");
        		System.out.println("----오늘의 일기----");
        		System.out.println(diary);
        		System.out.println("-----------------");
        		System.out.println("내일도 힘차게!");
        	}
        }
        728x90
        반응형

        'Java' 카테고리의 다른 글

        [Java] 49. 자바 GUI와 Swing 컴포넌트  (0) 2024.04.25
        [Java] 48. 인터페이스와 추상화  (0) 2024.04.25
        [Java] 46. 추상 클래스  (0) 2024.04.24
        [Java] 45. 배열, 업/다운 캐스팅, 다형성 활용 : 인형 뽑기 프로그램 만들기  (0) 2024.04.24
        [Java] 44. 다형성 활용: 스타크래프트 소스 코드 수정하기  (0) 2024.04.24
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바