*클래스 관계: UML 표기법(Unified Modeling Language)
*사용자 정의 데이터 타입 만들기
*클래스와 인스턴스
1교시
class : 역할에 따라 메서드를 분류한 것
package: 클래스를 역할에 따라 분류한 것
클래스 관계: UML 표기법(Unified Modeling Language)
객체 관리 그룹 OMG (object Management Group)에서 지정한 표준화한 클래스 관계를 표기하는 기법
1. 상속 관계 (inheritance)
(ex. 자동차에 덤프 트럭 기능 상속/ 기존 기능 + 특별 기능 추가)
class 자동차 { 시동 기능 {}, run() {}, stop() {} }
class 덤프트럭 extend 자동차 { dump() {..} }
2. 연관 (association)
사람 클래스가 핸드폰 클래스{전화(), 메세지(), 결제()}를 사용
class 핸드폰 {...}
class 사람 { 핸드폰 phone; 연락한다(){}; 사진찍기(){}; 책보기(){} }
class 핸드폰은 dependency(의존) object(객체)임. 걍 dependency라고 부름.
3. 집합 (aggregation)
약집합
A 클래스가 B 클래스를 포함한다.
컴퓨터클래스, 키보드 클래스
class 키보드 {...}
class 컴퓨터 { 키보드 keyboard; ...}
-연관과 코드상으론 똑같음. 의미가 다를 뿐. 따라서 애매하고 특별한 이유가 없으면 퉁쳐서 연관으로 쓰기
컴퓨터 ≠키보드 (Lifecycle 이 다름)
4. 합성 (composition)
더 강하게 포함/ 강집합
class 그래픽 카드 {...}
class 컴퓨터 { 그래픽카드 graphicCard; ... }
컴퓨터 == 그래픽카드 (Lifecycle 이 같음. 컴퓨터를 버리면 그래픽카드 버려짐)
컨테인 포함되는 넘. 컨테이너 포함하는 넘
컨테인 == 컨테이너 라이프사이클이 같으면 합성관계
요것두 딱히 이유없으면 연관 사용
5. 의존 (dependency)
특정 기능을 수행(메서드 호출)할 때만 사용
쭉 사용하는게 아니라 드문드문 사용.
class 충전기 {...}
class 핸드폰 { 충전하라(충전기 adapter) { ... } } => 핸드폰과 파라미터인 adapter의 관계
요것두 딱히 이유없으면 연관 사용
어떤 클래스를 사용할 때 그 클래스가 사용하는 클래스도 같이 끌고 와야,, 됨 ?
2교시
사용자 정의 데이터 타입 만들기
※ user defined Data Type // (user: 자바 언어 사용자. 개발자)
=> 프로젝트에서 다루는 데이터를 담을 메모리를 설계
JAVA | primative Data type(자바 원시타입, 기본 타입): byt, short, int, lang , char, float, double, boolean | ||||||
User defined Data type: 프리머티브 제외 전부. Strong ,Date, Calculatorer, ArrayList |
※ 클래스 문법 용도
class 문법 |
메서드를 유지보수 하기 좋게 분류하기 => "메서드 분류" | |||||||
프로젝트에서 다룰 데이터 타입 설계하기 => "데이터 타입" 과 "연산자(메서드임)" 설계 |
※ 프로젝트
※ 클래스와 인스턴스(객체)
vo(value object) : 통상 클래스를 두는 폴더 이름
1. 설계도 생성
[데이터를 저장할 메모리 설계도]
public class Member {
int no;
String name;
String email;
String password;
char gender;
}
//변수 선언 - 값 안 주고 선언만 먼저 할 수 있음
2. 인스턴스(객체) 생성
Member obj = new Member();
obj : "레퍼런스" 인스턴스의 주소를 담는 변수,
앞에는 클래스 명을 적어서 member 의 주소를 담는 변수라는 걸 표현.
설계도에 따라 아래와 같이 변수를 생성한다.
설계도에 따라 실체하는 메모리: 인스턴스(instance)
[instance]
인스턴스와 변수(인스턴스 필드), 레퍼런스 , 값 할등
Member obj = new Member()
obj.no = 100;
인스턴스 변수(필드)에 값을 주려면 레퍼런스.인스턴스필(obj.no) 해야됨.
실행에러
지정되지 않은 인스턴스를 부르면 오류뜸
※ 레퍼런스, 인스턴스, 가비지
Memeber m1 = new Member();
m1 = new Member();
기존 Member() : 주소를 잃어버려 주소를 보관하고 있을 레퍼런스가 하나도 없을 때 "Garbage"가 된다.
3교시
※ 레퍼런스 배열
Member m1, m2, m3;
m1 = new Memeber();
m2 = new Memeber();
m3 = new Memeber();
m1, m2, m3에 각각의 new Member의 주소가 들어감.
만약 인스턴스를 100개 생성한다면, 인스턴스 주소를 100개 담을 레퍼런스를 선언해야한다.
//
Member[ ] members; //(members = 레퍼런스 배열의 주소를 담을 변수)
members = new Member[100]; // Member 인스턴스 주소를 저장할 레퍼런스를 100개 만들라는 뜻 , 멤버 인스턴스를 100개 만들라는 말이 아님. // 레퍼런스 배열
members[0] = new Member; //members[0] = 레퍼런스, new Member; =인스턴스 만드는 것임
**주의: 인스턴스 배열을 만드는 문법은 없다.
member[0]. no = 100; 2170에 0 넣음
member[2]. no = 300; // NullPointerException error // no2주소가 존재 하지 않을 때 발생
c, c++에서 클래스에서 인스턴스를 많이 만들면 stack에 쌓여서 문제가 발생함. (인스턴스 메모리가 커서)
그 다음에 나온 java에서는 모든 인스턴스는 heap에 쌓이게 하자.
프로젝트
4교시
※인스턴스와 메모리
MemberHandler.inputMember() ; // 호출
Method Area 1. MemeberHandler.class 프레임안에 inputMember() {코드} |
Method Area 에 코드 위치함. | |
JVM stack 2. inputMember() 호출 - 프레임 생기고 로컬 변수(m) 준비 4. m에 인스턴스 주소 저장 |
Heap 3. new Memeber() 인스턴스 생성 (배열 생김) (기본 값은 int = 0, 주소는 null) |
JVM stack 에는 사용할 메서드(프레임)가 생김. 프레임안에 사용할 변수가 생김 메서드 코드가 있는게 아님 (메서드에리어에 있음) |
메서드 안의 변수는 로컬변수이고 jvm에 생김 new로 만들어지는 인스턴스 변수는 heap에 생김 |
※스태틱 필드와 논스태틱 필드
(=클래스 필드)와 (=인스턴스필드)라고 부름
class MemberHandler {
static Member[] members = new Member[100];
static int userId = 1;
static int length = 0;
}
가운데 요소들을 스태틱 필드라고 부름
클래스를 로딩할 때 생성함
class MemberHandler { static Member[] members = new Member[100]; static int userId = 1; static int length = 0; } |
가운데 static 요소들을 스태틱 필드라고 부름 클래스를 로딩할 때 Method Area에 생성됨 클래스 로딩할 때, 딱 한 번만 생성된다. (원래 클래스는 한 번만 로딩 됨.) new는 heap에 생김 |
class Member { int no; String name; String email; } memberHanlder.inputMember(); |
int no, String name, String email 은 Method Area, JVM Strack, Heap 생성 안 됨 Method Area에 memberHandler.class 로딩되고 JVM stack에 inputMember 로딩됨 |
오후 수업
1교시
class 문법 -> 데이터 타입을 정의
오후 실습
'[네이버클라우드] 클라우드 기반의 개발자 과정 7기 > 웹프로그래밍' 카테고리의 다른 글
[NC7기-33일차(6월12일)] - 웹프로그래밍 14일차 (2) | 2023.06.12 |
---|---|
[NC7기-32일차(6월9일)] - 웹프로그래밍 13일차 (0) | 2023.06.09 |
[NC7기-30일차(6월7일)] - 웹프로그래밍 11일차 (0) | 2023.06.07 |
[NC7기-29일차(6월5일)] - 웹프로그래밍 10일차 (0) | 2023.06.05 |
[NC7기-28일차(6월2일)] - 웹프로그래밍 9일차 (0) | 2023.06.02 |