10). Hirerarchy(계층구조)
OOP(object oriented Programming)
특징 : inheritance(상속성) : 상속관계에 있는 두 클래스사이 부모클래스가 자식클래스에게 속성을 물려줌
코드의 중복을 없애고 코드의 재사용을 위함 (부모의 특성을 받아 구체화시킴)
- encapsulation(캡슐화/은닉화) : 외부에 노출할 필요가 없는 정보들을 은닉
- 정보 ? ->data -> Vo / Dto -> bean
- polymorphism(다형성) : 같은형태이지만 다른기능을 하는것.(오버라이딩)
- 관계는 is a관계(포함: extends) / has a관계(사용함 : association)
[상속성]
-
Extends : 일반 Class를 확장할때 사용(Class : 일반클래스/Interface/EnumClass)
-> 모두 멤버가 구성되어있는 Class
-> 멤버중에 추상화(Abstract : {}이 없는 메소드) class
-> 실선 화살표
-
implements : 메모리의 최적화, 소스의 은닉(Override)
-> Interface Class를 확장할때 사용
-> 점선 화살표
** 확장을 하는 이유 !! : 확장하고자 하는 클래스의 특징을 물려받기 위해 사용
** Override : Extends/implements 가 되어있는 전제하에 부모의 모든 멤버메소드를 자식에서 재정의해서 사용
외부에서 부모의 메소드를 실행 시켜도 자식의 메소드가 실행됨
-
factory design pattern : 위 두개를 가지고 만드는 것 (물-수증기-얼음)
[캡슐화]
-
접근제한자
-
getter/setter
[Static 관련 실행내용 확인]
1). 연산과정을 하는 Vo Class하나를 만든다.
2). static 메서드를 하나 만든다.
3). Main Class내에서 Vo Class를 3번 호출한다. new Vo(); x3 => 결과 : 1
4). public Vo() 메서드를 만든다.
5). Main Class내에서 Vo Class를 3번 호출한다. new Vo(); x3 => 결과 : 3
이유 !!! : Static은 실행될때 한버만 호출되기 때문에 결과가 1이 나온다.
**선언 : 입력하고자 하는 공간을 설정
-
기본타입 선언 int i;
선언&입력 int i=10;
-
객체생성(instance화)
new A(); // instance class를 메모리에 할당하는 작업(new)
A a = new A();
11). Static
-
생성되는 곳 : Method Area
-
메모리에 한번 할당/프로그램이 종료될때 환원됨
-
고정주소와 고정 HashCode를 갖고있다.(변화하는 주소가 아니기때문에 호출시 포함되어있는 class명.~~으로 사용)
12).메모리구조
** null : stack에는 선언되어있지만 heap과 연결되어있지 않은 상태
-> 메모리 정리하면 - heap에 있던 ref01이 지워지는것
-> new 해서 객체를 생성하게 되면 Heap영역에 객체가 생성되어 A a에서 Stack에있는 a와 연결이 된다!!!!
** Garbage Collection (Heap영역의 특징) : Heap영역과 연결이 끊어진상태인 데이터(heap)만 담긴다.(사용하지 않는 데이터)
If). int a =10; int b=a;를 했을때 stack에서 값복사가 일어나서 b=10이되고,
그뒤에 a=30;을 넣게되면 a=30, b=10이라는 값으로 정해진다. 이것을Pass by value 라고 한다.
13). 반환타입
반환타입이 될수있는것 : 기본타입, 참조타입, 유저클래스 타입
<리턴 타입이 있는 메서드 작성하는법>
1. 반환에 되는 타입을 고려한다(커피) 커피 : 타입
2. 메소드를 선언한다
3. 반환 타입과 같은 타입으로 변수를 선언한다. 필요시 초기값을 입력한다.
4. return 예약어를 작성하고 선언한 변수를 작성한다.
5. 연산을 작성한다.
public 커피 coffeeMachine(int n){
커피 c = null;
if(n==1){
c= new 커피("아아");
}
return c;
}
[Return 연습]
return 값이 있는 것과 없는 것의 비교
14). main(String[] args)
String[]: parameter : 매개체/전달 변수 (값을 전달하는 매개)
args : Arguments : 값(value)
호출 : 다른 class(Main class)에서 실행하거나 객체생성을 하는것
15). 참조타입
[Shallow Copy]
얕은 복사-> Stack영역에 변수가 생성되지만 Heap영역에는 같은 ref와 has를 찾아간다.
[Deep Copy]
깊은 복사-> Heap영역에 같은 구조의 객체껍데기가 복사되지만, 내용물이 재생성되서 존재하게된다.
[참조 타입]
-
pass by reference, assign by reference, call by reference
-
값을 복사하는것이 아닌 객체를 찾아갈수 있는 위치인 주소,hashcode(heap에 생성)를 전달한다.
-
API,Array , user define Class(사용자 정의 클래스)이다.
-
기본타입을 묶어서 새로운 타입을 만들어낸다.
-
mutable하다 -> 껍데기가 변하지 않고 내용만 변화시킨다. ->shallow copy
-
heap에 생성된다.
-
주소와 고유값(hashcode)를 가지고 있다.
**deep Copy 방법을 활용해서 같은 class 형태이면서 같은 값을 가진 객체를 생성하여 전달
16). 기본타입
[기본 타입]
-
pass by value, assign by value, call by value이다
-
값을 복사하여 전달한다.
-
숫자(Number) , 문자(char/varchar(db=)), 날짜(Date)
-
최소단위로 byte를 사용한다!
-
Literal이다.
-
stack에 생성된다.
-
immutable하다 한번입력되면 변하지 않는다.
'Java > Basic' 카테고리의 다른 글
[Java-Basic] Reflection API 를 사용하여 Custom Annotation 만들기 (0) | 2021.01.22 |
---|---|
[Java] scanner.skip("(\r\n|[\n\r\u2028\u2029\u0085])?"); 란? (0) | 2021.01.22 |
[Java] 초보 가이드 -4 (0) | 2021.01.04 |
[Java] 초보 가이드 -2 (0) | 2020.12.30 |
[Java] 초보 가이드 -1 (0) | 2020.12.30 |