-
자바 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