반응형
*Class
-class
-abstant class
-interface
-innerclass-innerclass
-innerclass-nested class
-innerclass-local class
-innerclass-anonymous class
-
Class : 설계도, 사용자정의 자료형이며 참조형 데이터형(객체생성[ :클래스를 사용하기위해서 heap메모리에 올리는 과정]해 사용)이다.
-
문법: 클래스명 객체명 = new 생성자();
-
=>객체명으로 여러기능(method) 사용.
-
new 생성자(); <객체화를 한후에 작업이 종료되는 경우 method를 부를필요가 없는 경우
-
=>객체화로 사용이 끝나는 경우, method호출할 필요 X
-
new 생성자().method명(); =>객체화 후에 method를 하나만 호출하면 종료하는 경우.
-
상속 : 부모클래스의 기능을 자식 클래스에서 확장하여 사용하는 것.
-
장점 : 코드의 재사용성 증가.
-
<사람세계에서는 부모가 자식을 낳지만 상속은 자식이 부모의 기능을 사용하다보니 자식이 선택하여 자식->부모가 된다.
-
<extends 부모 : 로 부모의 정보가 남지만.. 부모에게는 아무 흔적이 남지 않아 부모는 자식을 모른다.
-
자식->부모 (:부모는 자식을 모른다.) <보통 부모는 남이 만들고 자식은 내가 만들게 된다...남이 만든거 내가건들이기 힘드니까..
-
<자식은 부모를 안다~!
-
<부모에는 변수와method 자식에게도 변수와 method가 있는데,
-
부모의 자원을 쓸때 super, 자식이 자기꺼 쓸때 this() (:생성자 호출) , this.변수 (:method형식();)
-
this는 내클래스의 자원과 부모클래스의 자원을 다 쓸수 있다.
-
super : 부모의 자원과 자식의 자원이 같은 이름을 가질때, 부모의 자원을 식별하기 위해 사용
-
Override: 부모자식관계에서 부모의 메소드 재정의(모두 같고 수행되는 코드만 달라야한다.) 최우선~!~!
-
Overload: method 재정의(parameter만 다르다.)
-
Override,Overload => 다형성
-
캡슐화 : 접근지정자로 접근을 제어
*객체화(5가지중 4번째)
-
ex)
class Super{
int i;
public Super(){
}
public void printI(){
system.out.println(i);
}
}
class Sub extends Super{
int j;
@Override //(anotation: JDK 1.5부터 추가)
public void printI(){
system.out.println("자식 i"+i);
}
public void printJ(){
system.out.println("자식"+j);
}
}
-
<객체화를 하게 되면 보통 자식클래스로 객체화를 하는데
-
Sub s = new Sub(); <이때의 s 라는 변수명으로 부모의 자원 (변수, method) 사용가능하게 된다.. 패키지가 보통 달라 default쓸수 없다고 많이 본다.
-
Super s = new Sub(); <가능, 자식은 부모이다. 라는 말이 있다... 자식클래스를 갔더니 부모가 누군지 알아서 가능하게 된다.
-
=> is a 관계의 객체화.~!~!~!!
-
<원래는 같아야 하는데, 관계가 들어 있어 되는것.
-
<has a? 관계 도...나중에..
-
is a 관계의 객체화 : 부모 클래스명 객체명 = new 자식클래스의 생성자(); : 자식의 부모를 알고있기 때문에 가능.
-
Super s = new Sub(); <객체화를 자식으로 해도 설계도가 Super이므로 부모의 변수와 method만 사용가능하게 된다.
-
=> 부모의 자원(변수, mehtod)
-
s.i=100; <가능. 변수는 부모의것 사용하는데,
-
s.printI() <오버라이드 되어 자식의 것이 최우선적이므로 x
-
:Override된 method인 경우 자식의 method 가 최우선적으로 호출된다.
-
Sub s = new Super(); X:어디에도 자식의 정보가 없기때문에 할당이되지 않는다.
-
:부모클래스에는 자식클래스의 정보가 들어있지 않기 떄문에
-
: is a 관계의 객체화 =>객체다형성(Super s = new Sub(); / Sub s = new Super(); (X) )같은 객체의 이름을 다르게 사용?
*추상클래스
class 클래스명
변수//명사적특징
method//동사적 특징 : 일-부모구현O , 부모구현X->자식에서 하게끔 하는게 추상클래스.
-
ex)
-
<person에서 인자있는 eat을 볼때 아무도 안쓰고 다 재정의 해서 쓸때 부모에 정의할 필요가 없음, 부모가 일안하고 자식이 하게 끔
-
객체화가 되지 않는다. (단, 자식 클래스가 생성되면서 부모가 만들어지는 경우에는 객체화 가능.)
-
상속을 목적으로 만들어지는 클래스
-
추상 method
-
method의 body가 없는 method, 일을 정의할 수 없다.(일의 목록(:자식에서 반드시 구현=>구현의 강제성)만 정의)
-
작성법) <PL/SQL의 패키지 헤더와 비슷<너는 내자식이고 이거이거 해야해,,하는것.
-
접근지정자 abstract 반환형 method명(매개변수,,,);
-
접근지정자 : public 이거나 protected, default(같은 패키지내에),static,synchronized <final은 오버로딩을 해야해서 X 상속ㄴㄴ니까 안됨.
-
public : 클래스 외부에서 접근 가능
-
protected : 같은 패키지 안의 다른 클래스에서 접근 가능, 패키지가 다르면 상속관계의 자식클래스에서만 접근 가능하다.
-
default : 접근지정자를 기술하지 않은 상태, 같은 패키지 안의 다른클래스에서 접근가능 <기본 접근지정자..안쓰면 default
-
다른 패키지의 클래스에서는 접근 불가하다.
-
private : 클래스 안에서만 접근가능 <(밖에서는 무조건 자식도 안됨, 나만쓸꺼야)★
-
(폴더directory 개념)
-
static : 공용메모리에 생성
-
final : 값변경 불가 <메모리에 올라간 변수로의 차단
-
transient : 직렬화 방지 키워드 <정보누수 방지 /토막내는게 직렬화=>막는다.
-
(memory 개념)
-
ex)
-
<person에서 인자있는 eat을 볼때 아무도 안쓰고 다 재정의 해서 쓸때 부모에 정의할 필요가 없음.
-
=>abstractor Person/ abstractor eat=>추상메소드
-
=>굳이 부모에서 만들필요가 없지만 사람이라면 뭐든 먹어야...
-
=>자식클래스가 반드시 자신에 맞게 구현해야할 일의 목록 : 추상 method.
-
=>+언어 : 사람은 언어를 반드시 가진다.
*Interface
-
다중상속의 장점을 사용하기 위해 사용.
-
기능추가를 손쉽게 할수 있다.
-
약결합의 구현으로 객체간의 유연성을 향상시킬수 있다.
-
<결합도는 낮고 응집도는 높은게 좋은 프로그램<약결합이 빠름.<얘 때문에 자바의 꽃
-
<생성자를 못가진다. 객체화 ㄴㄴ
-
객체화가 되지 않는다.(is a 관계의 객체는 저장할 수 있다.)
-
구현클래스(나의 자식) 가 생성되면 그 주소는 저장가능하다. ->is a 관계의 객체화는 가능. (생성자가 없어 스스로는 안됨)
-
문법) 접근지정자 interface 인터페이스명 extends 부모인터페이스,,,{
-
public : 패키지 외부에서 접근 가능,
-
default(패키지 접근지정자) : 패키지 내에서만 접근 가능해요.
-
부모인터페이스가 여러개 가능.
-
추상메소드는 body가 없어 일을 할수 있는애가 아니었는데,... 얘는 일의 목록...
-
JDK1.8 에서부터는 Default method가 추가 됨.(Default method: 추상메소드만 가졌는데, 일을 할수 있는 body({ })를 가진 method
-
<변수는 가질수없고 가지면 Error
-
<상수는 프로그램에서 필요한 기준값을 담는데, 값변경이 되지 않는다. public static final 상수명= 값; 의형테를 띔
-
abstract method를 가진다.
-
접근지정자 abstract 반환형 method명 (매개변수,,,); <내자식은 이걸 꼭 해야해 할때..!
-
접근지정자 반환형 method명(매개변수,,,);
-
이떄의 접근지정자 : public , protected , default
-
ex) 걸어다니는것-표유류-개,소,사람-시츄,치와와,진돗개, 황소,젖소,누렁이,점박이, 홍,이-길동,재찬, 클락
-
<공통특징을 위로올리게된다.
-
<이때의 걸어다니는것은 클래스가 될수도 인터페이스가 될수도 있다.
-
ex) 날라다니는것-조류-닭, 비둘기, 독수리--- 이때 클락은 날기도 하는데 부모가 둘이라 부모가 모호하다는 단점.
-
<다른부모가 제공하는 자원도 쓰고 싶을때 inter face로 만들고 정의하게 된다.
+인터페이스명 |
+Constant |
+abstract method |
↑
|
| (구현은 점선)
|
+자식클래스 |
|
추상method Override |
-
작성법)
-
class 클래스명 [implement 구현인터페이스명,,,];
-
<추상클래스가 되면 구현안해도 되는데,,,
-
<인터페이스는 내줄에있는 모든 추상메소드가 있는 모든거 구현해야한다./일반은 다 override해야한다.
-
<내 위에 있는 모든 상속줄의 부모의 추상 method를 모두 override해야 한다.
-
<interface내에서는 override해도 body가 없어 아무소용이 없기 때문에 추상메소드를 구현하지 않는다.
-
//자식 클래스로 객체화 : 모든 mehtod를 호출할 수 있다.(//자식클래스명 객체명 = new 자식의생성자(); 가 일반적)
-
//is a 관계의 객체화(부모를 앞에두고 객체화) : 내 상속 줄에 있는건 모두 다 올수 있다.
-
//<is a 관계의 객체화는 생성자가 중요한게 아니라 담아내는 데이터형에따라 호출이 달라지므로 데이터형이 중요
-
//부모와 같은 이름의 변수는 자식의 변수를 사용하고, method의 이름이 다르면 각각 다 사용할수 있다. 만약 override한 method라면 override한 method 가 출력된다.
-
//객체다형성이라고도 한다.
-
//is a 관계의 객체화 : 부모의 자원과, 자식이 Overrride한 method 사용.
-
//부모클래스명 객체명 = new 자식클래스생성자();
-
//<interface는 자식을 통해서만 객체가 만들어진다.
부모는 모든(사람)클래스의 공통특징vs 자식은 나만의 특징.
-
<interface의 default method로 일반업무를 볼수있게 되는데, 츄상클래스와 큰차이가 없게된다.
-
* default method: 인터페이스에서 업무(자바코드)를 기술 할 수 있는 method <br>
-
* default method를 호출하려면 구현 클래스로 is a 관계의 객체화를 해야만 한다.<br>
반응형