。゚(*´□`)゚。

코딩의 즐거움과 도전, 그리고 일상의 소소한 순간들이 어우러진 블로그

[네이버클라우드] 클라우드 기반의 개발자 과정 7기/웹프로그래밍

[NC7기-31일차(6월8일)] - 웹프로그래밍 12일차

quarrrter 2023. 6. 8. 14:22

*클래스 관계: UML 표기법(Unified Modeling Language)

*사용자 정의 데이터 타입 만들기

*클래스와 인스턴스


1교시

class : 역할에 따라 메서드를 분류한 것 

package: 클래스를 역할에 따라 분류한 것 

 

클래스 관계: UML 표기법(Unified Modeling Language)

객체 관리 그룹 OMG (object Management Group)에서 지정한 표준화한 클래스 관계를 표기하는 기법 

 

1. 상속 관계 (inheritance)

A 클래스를 B 클래스가 상속 받는 것

 

(ex. 자동차에 덤프 트럭 기능 상속/ 기존 기능 + 특별 기능 추가)

class 자동차 { 시동 기능 {}, run() {}, stop() {} }

class 덤프트럭 extend 자동차 { dump() {..} }

 

 

 

 

 

 

 

 

 

2. 연관 (association)

A 클래스가 B 클래스를 지속적으로 사용

 

사람 클래스가 핸드폰 클래스{전화(), 메세지(), 결제()}를 사용 

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]

int 값이 0이면 0으로 표현, 주소(레퍼런스)가 0이면 null이라 부름, char는 \u0000, 불린 false, float, double 0.0
인간을 위한 고차원적으로 표현/ 이 표현 사용

 

인스턴스와 변수(인스턴스 필드), 레퍼런스 , 값 할등 

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에 쌓이게 하자. 

 

 

프로젝트

Member class 상의 인스턴스 필드로 members 라는 이름의 인스턴스를 만들어서 아랫단 삭제.. MAX_SIZE 만큼 길이의 인스턴스(메모리)을 만드는데 한 칸마다 MEMBER의 요소(필드)들이 들어감
members의 i번째 배열 반복
두 개가 같음 아랫단 삭제.
두 개가 같음 아랫단 삭제.
아래랑 같은 거임
전위 연산자

//멤버핸들러 프롬프트 단순 메서드 묶는거
//Member : 데이터를 저장할 메모리를 설계할 용도, new를 써야댐 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 문법 -> 데이터 타입을 정의

오후 실습