==========05-1 클래스
---Class
클래스 - 객체를 만드는 기능
public class Animal{
Animal cat = new Animal();
}
new는 객체 생성할 때 사용함. 생성시 Animal의 인스턴스인 cat, Animal의 객체가 만들어진다.
-cat는 객체
Class는 (과자틀), 과자틀에 의해 만들어진 과자들을 (객체)로 보면된다.
객체는 무수히 많이 만들수 있다.
---객체 변수
public class Animal{ String name;
}
Animal 클래스에 name이라는 String 변수를 추가, 이렇게 선언된 변수는 객체 변수라 불린다.
(객체, 객체변수로 생각하면 쉽다.)
객체변수를 사용할 때는 객체.객체변수를 쓰면된다.
cat.name 으로 쓴다.
---메소드
클래스안에서 구현된 함수를 메소드라 부른다.
1 2 3 4 5 6 7 8 9 10 11 12 | public class Animal { String name; public void setName(String name) { this.name = name; } public static void main(String[] args) { Animal cat = new Animal(); System.out.println(cat.name); } } | cs |
위에서는 setName이 메소드이다. 메소드명뒤의 괄호에는 입력값이 들어가는데 String name을 입력해주면
함수안의 내용이 출력된다. 위는 return값이 없기에 출력안된다.
메소드를 호출하는 형식은 cat.setName("hihit22");이 되는데 이는 String형으로 입력받기 때문이다.
순서는 cat.setName("hihit22"); 로 호출하고 "hihit22"이라는 값이 전달되어 메소드 안은 this.name = "hihit22";
이 된다. 결국 cat.name 에는 = "hihit22"이 들어가게된다.
==========05-2 메소드
앞의 메소드를 간단하게 비유하자면 믹서기를 들수 있는데 입력값인 과일을 넣으면 일을 수행하고, 결과값이 나온다.
메소드를 사용하는 이유는 똑같은 내용을 반복하지 않기 위해서라고 할 수 있다. 예를들면
1 2 3 | public int sum(int a, int b) { return a+b; } | cs |
위에서는 sum사용시 입력값으로 int형 두개의 값을 받고 결과값으로는 그 두개의 입력값의 합이 나온다.
---메소드는 입출력 유무에 따라 다음과 같이 4가지로 분류할 수 있다.
- 입력과 출력이 모두 있는 메소드
- 입력과 출력이 모두 없는 메소드
- 입력은 없고 출력은 있는 메소드
- 입력은 있고 출력은 없는 메소드
이것과 메소드 내에서 선언된 변수의 범위는 이미 알기에 넘어간다. 불필요한부분은 줄이자.
==========05-3 Call by value
1 2 3 4 5 | class Updater { public void update(int count) { count++; } } | cs |
이것을 쓸때는
1 2 3 4 5 | class Updater { public void update(Counter counter) { counter.count++; } } | cs |
밑에 class명이 Counter일때는 그에 해당하는 type(class)를 앞에 적어줘야 count가된다.
==========05-4 상속
상속은 자식이 부모로부터 무언가를 물려받는다 생각하면된다.
1 2 3 4 5 6 7 8 9 10 11 12 | public class Dog extends Animal{ public void sleep() { System.out.println(this.name+"zzz"); } public static void main(String[] args) { Dog dog = new Dog(); dog.setName("a"); System.out.println(dog.name); dog.sleep(); } } | cs |
Animal이 부모라 하고 dog.java를 만들었을때 위처럼 extends 부모라 적으면된다.
객체 생성후 자식.부모의 메소드를 쓸수 있다.
결국 부모의 메소드를 물려받아 사용하는 것이고 물론 자신의 메소드도 함께 쓸 수 있다.
---IS-A관계
또한 상속을 받을시
Animal dog = new Dog(); 을 쓸 수 있는데.
해석하면 Dog로 만든 객체는 Animal 자료형이다. 하지만 반대는 말이 안되므로 안된다.
---메소드 오버라이딩(부모한테 타다)손자가 부모것을 물려받고 또 물려받을수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | package Pack01; public class HouseDog extends Dog { public void sleep() { System.out.println(this.name + " zzz in house"); } public static void main(String[] args) { HouseDog hd = new HouseDog(); hd.setName("happy"); hd.sleep(); } } | cs |
위처럼 부모에게 상속받은 것을 또 그밑에 자식이 물려받을수 있다.
단 자식의 자식이 메소드를 사용시 부모의 같은이름의 메소드가 존재할경우 자식의 메소드가 실행된다.
--메소드 오버로딩(입력항목이 다른 메소드를 여러개만들 수 있다.)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | package Pack01; public class HouseDog extends Dog { public void sleep() { System.out.println(this.name + " zzz in house"); } public void sleep(int hour) { System.out.println(this.name + " zzz in house"+hour+"시간동안잔다."); } public static void main(String[] args) { HouseDog hd = new HouseDog(); hd.setName("happy"); hd.sleep(4); } } | cs |
메소드 오버로딩과 메소드 오버라이딩을 꼭 구분하자.
오버로딩은 같은거 여러개쓰는거 입력값다를때
오버라이딩은 손자가 할아버지 등에 탄다.
'풀스택 > JAVA 정리' 카테고리의 다른 글
(점프투자바 요약) 5장 객체지향 프로그래밍 2 (0) | 2019.02.11 |
---|
댓글