ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 자바 100제 Part.3 / 5 ~ 13
    개발자 수업/인터넷 강의 2021. 9. 17. 13:02

    1. 클래시 작성 시 주의할 사항 중 틀린 것은?

    (1) 하나의 파일에 2개 이상의 클래스를 작성할 수 있다

    (2) 3개의 클래스가 있다면 자바 파일명이 될 수 있는 것은 public 키워드가 붙은 클래스이다

    (3) 하나의 파일에 있는 3개의 클래스에 모두 public 키워드를 붙일 수 있다

    -> 하나의 클래스에만 public 키워드를 붙일 수 있다

    (4) 한 파일 내 3개 이상의 클래스에 모두 public 키워드를 안 붙일 수 있다

    (5) 한 파일 내 3개 이상의 클래스에 모두 public 키워드가 없다면 클래스 중 어느 것이라도 파일명이 될 수 있다

    (6) 자바 파일에 클래스가 한 개 있다면 클래스명이 곧 파일명이 되어야 한다

     

     

    2. 클래스에서 생성자란 무엇이고 어떤 특징을 갖고 있는지

    [1] 생성자 (Constructor)

     생성자는 new 키워드로 클래스의 객체(또는 인스턴스)가 생성될 때 제일 먼저 자동적으로 호출되는 메서드

     따라서, 객체의 초기값을 설정하는 등의 용도로 많이 사용

     생성자명은 클래스명과 동일하게 만든다

     생성자는 리턴되는 반환 값이 없다 -> 객체가 생성될 때 제일 먼저 호출만 된다

     생성자는 오버 로딩이 가능하다

     생성자는 default 생성자라는 게 있다 -> 클래스 내에 생성자가 없다면 default 생성자가 자동 호출 -> 클래스 명과 동일하고, 받는 인자 값 X

     

    [2] 생성자 위치

     보통 속성과 메서드 사이에 기술

     생성자도 메서드이므로 메서드 그룹에 속하는데 제일 상단에 보통 위치함

     

    [3] 예

    class Preson{
    
    	// 속성 (attribute)
      	 int age;
      	 String name;
        
      	 // 생성자 (Constructor)
      	 Preson(){}
        
      	 // 메서드 (method)
    	void move(){
        	System.out.println(Person is moving.");
        }
    }

     

     

    3. 객체 생성 시 초기값을 생성자 메서드에서 설정하는 클래스 구현

    class Person{
    	// 속성
        int age;
        String name;
        
        // 생성자
        Person(){}
        Person(int age, String name){
        	this.age = age;
            this.name = name;
        }
        
        // 메서드
    	void printPerson(){
        	System.out.println("나이:" + age +", 이름 :" + name);
        }
    }
    
    public class Java100_oop_Exam006{
    	public static void main(String[] args){
        	// 객체 생성
            Person p1 = new Person(20, "홍길동");
            	//System.out.println(p1);	// 주소값
            	//System.out.println(p1.age); 	// 20
            	//System.out.println(p1.name); 	// 홍길동
            p1.printPerson(); //나이:20, 이름:홍길동
            
            Person p2 = new Person(30, "이순신");
            p2.printPerson();
            Person p3 = new Person(40, "을지문덕");
            p3.printPerson();
        }
    
    }

     

     

    4.  클래스에서 상속이란 무엇인지 상속의 정의와 특징

    [1] 상속(inheritance)이란?

     말 그대로 부모 클래스가 가지고 있는 속성(변수)들과 동작/기능(메서드)들을 그대로 물려받아 새로운 클래스를 만드는 것

     상속을 활용하면 물려받은 것들은 그대로 쓰면 되고, 거기에 덧붙여 새로운 것만 만들면 되므로 그만큼 노력과 시간이 세이브됨

     이 때, 물려받게 되는 원본 클래스를 부모 클래스(Parent class) 또는 슈퍼 클래스(Super class)라고 부름

     상속받아 새롭게 만들어진 클래스는 말 그대로 자식 클래스(Child class) 또는 서브/하위 클래스(Sub class)라고 부름

     

    [2] 상속의 장점

     가장 큰 장점 -> 재활용성

     완전히 새로운 것을 만드는 것이 아니라 기존 부모로부터 상속을 받아 필요한 것만 추가로 더해서 만드는 것

     부모 클래스에 정의되어 있는 멤버 필드(변수)나 메서드들을 그대로 상속받아 사용하면 됨

     상속받은 메서드라 해도 필요에 따라서 자식 클래스에서 용도를 변경해서 사용하는 것도 가능

     

    [3] 상속의 사용

     기존 부모 클래스를 확장한다는 개념 -> extends 키워드 사용

     부모 클래스의 멤버 필드, 메서드는 상속이 가능하나 생성자는 상속이 안 된다

     부모 클래스의 접근 제한자 private인 경우에는 아무리 자식 클래스가 상속을 받았다 하더라도 접근 불가능

     

     

    5. 클래스의 상속을 코드로 구현

    class Person{
    	//Field
        int gender;
        int power;
        
        //Constructor
        Person(){
        	this.gender = 1; // 1:여성, 2:남성
            this.power = 100; // 기본 파워
        }
        
        //Method
        void walk(){
        	System.out.println("걸어가고 있어요.");
        }
    }
    
    class Hero extends Person{
    	//field
        String name;
        int age;
        
        //constructor
        Hero(){}
        Hero(String name, int age){
        	this.name = name;
            this.age = age;
        }
        
        //method
        void walk(){
        	System.out.println("2배로 빨리 걸어가고 있어요.");
        }
        void eat(){
        	System.out.println("밥먹고 있어요.");
        }
        void displayPerson(){
        	System.out.println("이름:" + name + ",나이:" + age + ",성별:" + gender + ",파워:" + power);
        }
    }
    
    
    class Villain{}
    
    
    public class Java100_oop_InheritanceSample2{
    	public static void main(String[] args){
        	// 객체 생성
            Person p1 = new Person();
            p1.work();
            
            // 상속을 통한 슈퍼맨 객체 생성
            Hero h1 = new Hero("슈퍼맨",20);
            System.out.println(h1.name);
            System.out.println(h1.age);
            System.out.println(h1.gender);	//부모 클래스 필드(변수)
            System.out.println(h1.power);	//부모 클래스 필드(변수)
        
        }
    }

     

     

    6. 메서드 오버라이딩에 대해서 설명하고 구현

    class Person{
    	//Field
        int gender;
        int power;
        
        //Constructor
        Person(){
        	this.gender = 1; // 1:여성, 2:남성
            this.power = 100; // 기본 파워
        }
        
        //Method
        void walk(){
        	System.out.println("걸어가고 있어요.");
        }
    }
    
    class Hero extends Person{
    	//field
        String name;
        int age;
        
        //constructor
        Hero(){}
        Hero(String name, int age){
        	this.name = name;
            this.age = age;
        }
        
        //method
        void walk(){
        	System.out.println("2배로 빨리 걸어가고 있어요.");
        }
        void eat(){
        	System.out.println("밥먹고 있어요.");
        }
        void displayPerson(){
        	System.out.println("이름:" + name + ",나이:" + age + ",성별:" + gender + ",파워:" + power);
        }
    }
    
    
    class Villain{}
    
    
    public class Java100_oop_InheritanceSample2{
    	public static void main(String[] args){
        	// 객체 생성
            Person p1 = new Person();
            p1.walk();
            
            // 상속을 통한 슈퍼맨 객체 생성
            Hero h1 = new Hero("슈퍼맨",20);
            h2.gender = 2;
            System.out.println(h1.name);
            System.out.println(h1.age);
            System.out.println(h1.gender);	//부모 클래스 필드(변수)
            System.out.println(h1.power);	//부모 클래스 필드(변수)
            h1.walk();  // 2배로 빨리 걸어가고 있어요.
            h1.eat();  //밥먹고 있어요.
            h1.displayPerson();  //이름:슈퍼맨,나이:20,성별:2,파워:100
            
            // 원더우먼 객체 생성
            Hero h2 = new Hero("원더우먼",30);
            h2.displayPerson();  //이름:원더우먼,나이:30,성별:1,파워:100
            
        
        }
    }

     

     

    7. getter, setter가 포함된 클래스의 상속을 코드로 구현

    class Person{
    	// Field		//private으로 변경, 수정 못하게 보호하지만 다른 클래스에서 사용 불가능
        private String name;
        private int age;
        private int height;
        private int weight;
        
        // Constructor
        Person(){}
        Person(String name, int age, int height, int weight){
        	this.name = name;
            this.age = age;
            this.height = height;
            this.weight = weight;
        }
        
        // Method
        public String getName(){return name;}
        public void setName(String name){this.name = name;}
        
        public void setAge(int age){this.age = age;}
        public Int getAge(){return age;}
        
        public void setHeight(int height){this.height = height;}
        public Int getHeight(){return height;}
        
        public void setWeight(int weight){this.weight = weight;}
        public Int getWeight(){return weight;}
        
        public void move(){
        	System.out.println("이동중..");
        }
    }
    
    class Villain extends Person{
    	// Field
        private String unique_key;
        private int weapon;	//1~9 숫자로 무기 분류
        private double power;
        
        // Constructor
        Villain(){}
        Villain(String name, int age, int height, int weight, String unique_ket, int weapon, double power){
        	super(name,age,height,weight);
            this.unique_key=unique_key;
            this.weapon=weapon;
            this.power=power;
        }
        
        // Method
        public String getUnique_key(){return unique_key;}
        public void setUnique_key(String unique_key){this.unique_key=unique_key;}
        
        public int getWeapon(){return weapon;}
        public void setWeapon(int weapon){this.weapon=weapon;}
        
        public String getpower(){return power;}
        public void setPower(double power){this.power=power;}
        
        //printPerson()
        public void printPerson(){
        	System.out.pritnln("악당 이름:" + getName());
            System.out.pritnln("악당 나이:" + getAge());
            System.out.pritnln("악당의 키:" + getHeight());
            System.out.pritnln("악당 체중:" + getWeight());
            System.out.pritnln("악당 넘버:" + getUnique_key());
            System.out.pritnln("악당 무기:" + getWeaponName(getWeapon()));	// 1:창, 2:방패, 3:총
            System.out.pritnln("악당 파워:" + getPower());
        }
        
        //getWeaponName()
        public String getWeaponName(int a){
        	String weapon;
            switch(a){
            	case 1:
                	weapon="창";
                    break;
                case 2:
                	weapon="방패";
                    break;
                case 3:
                	weapon="총";
                    break;
                default:
                	weapon="---";
                    break;
            }
            return weapon;
        }
    }
    
    class Hero extends Person{}
    
    
    public class Java100_oop_InheritanceSample5{
    	public static void main(String[] args){
        	// 객체 생성
            Villain v1 = new Villain("좀비",20,180,80,"15001231",2,99.5);
            v1.printPerson();
            System.out.print(v1.getName()+""); // 좀비 이동중..
            v1.move(); //부모 클래스의 move() 메서드를 호출
        
        	// 객체 생성
            Villain v2 = new Villain("도깨비",30,175,70,"11001121",1,77.5);
            v2.printPerson();
            System.out.print(v2.getName()+""); // 도깨비 이동중..
            v2.move(); //부모 클래스의 move() 메서드를 호출
    
        	// 객체 생성
            Villain v3 = new Villain("몽달귀신",40,150,40,"10001010",3,27.5);
            v3.printPerson();
            System.out.print(v3.getName()+""); // 몽달귀신 이동중..
            v3.move(); //부모 클래스의 move() 메서드를 호출
        
        }
    }

     

     

    '개발자 수업 > 인터넷 강의' 카테고리의 다른 글

    자바 100제 Part.3 / 24 ~ 28  (0) 2021.09.22
    자바 100제 Part.3 / 14 ~ 23  (0) 2021.09.18
    자바 100제 Part.3 / 1 ~ 4  (0) 2021.09.17
    자바 100제 Part.2 / 13 ~ 24  (0) 2021.09.15
    자바 100제 Part.2 / 6 ~ 12  (0) 2021.09.15

    댓글