Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Tags
more
Archives
Today
Total
관리 메뉴

개발자입니다

[비트캠프] 42일차(9주차2일) - Java(클래스) 본문

네이버클라우드 AIaaS 개발자 양성과정 1기/Java

[비트캠프] 42일차(9주차2일) - Java(클래스)

끈기JK 2023. 1. 3. 09:56

 

 

OOP

 

클래스 문법의 용도

 

① 메서드를 분류 : MemberHandler, Prompt

② 새 데이터 타입을 정의 : Score, Member

 

 

 

새 데이터 타입 정의

 

① 클래스 정의

class Score {

  -                     → 인스턴스를 만들때 생성된다 = new 명령을 실행할 때 생성된다. "인스턴스 변수(field)"

 

② 레퍼런스 선언

Score obj; 에서 obj는 Score의 인스턴스 주소를 저장할 변수(reference).

 

③ 인스턴스 생성

obj = new Score();  하면 설계도에 따라 변수를 Heap 영역에 만든다. name ~ aver 가 메모리에 만들어지고 인스턴스 주소 200이 obj에 저장된다. 이 메모리를 "Score의 인스턴스(instance)" 라 한다.

 

④ 인스턴스에 값 저장

obj.name = "홍길동" 하면 주소 200에 가서 name 변수에 "홍길동" 이 저장된다. (실제로는 "홍길동" 을 가진 인스턴스 주소가 저장)

 

 

 

클래스 정의의 위치

 

좌측 그림 : class Score { } 를 밖에 두면 class Test { }, class Test2 { }, class Test3 { } 에서 접근 가능하다. package 멤버 클래스라 한다.

중앙 그림에서 class Score { } 를 class Test { } 안에 두면 여기서만 접근 가능하고, class Test2 { }, class Test3 { } 에서 접근 불가하다. 

우측 그림에서 class Score { } 를 void m1() { } 안에 두면 여기서만 접근 가능하고, void m2() { }, class Test2 { }, class Test3 { } 에서 접근 불가하다. 이를 Local class라 한다.

 

이렇게 class 안에 있는 class를 "Nested class"라 한다.

독립적으로 존재하는 class를 "package member class"라 한다.

 

 

 

인스턴스 생성, 레퍼런스, call by reference

 

Score s = new Score(); 하면 인스턴스 공간이 생성되고 그 주소 200이 s에 저장된다.

s.name ~ s.math 및 printScore(s)  → 입력하면 인스턴스에 값 저장된다. s는 인스턴스의 주소이다.

 

 

 

메서드에서 인스턴스 생성 후 리턴

 

Score s = createScore("홍길동", 100, 100, 100); 하면 인스턴스 생성되고 값 입력 및 주소 200이 s에 저장된다.

printScore(s) 에서 s는 주소 200이다.

 

 

 

레퍼런스 배열 사용 전

 

Score s1, s2, s3; 하면 인스턴스 3개 생성되고 주소 200, 300, 400 이 저장된다.

 

 

 

레퍼런스 배열 사용 후

 

Score[] scores = new Score[3]; 에서 scores는 배열 레퍼런스, [3]은 레퍼런스의 배열이다.

Score 타입 배열 인스턴스 3개 만들어지고 주소 1700이 scores에 들어간다.

각 공간에는 Score() 인스턴스 주소 200, 300, 400이 들어간다.

 

 

 

인스턴스와 레퍼런스

 

Score s1 = new Score(); 에서 s1은 레퍼런스이며 인스턴스 주소 200이 저장된다.

Score s2 = s1; 하면 s1의 주소 200이 s2에 들어간다.

"Score의 인스턴스" = 객체 라 한다.

 

 

 

가비지(Garbage)

 

Score s1 = new Score(); 하면 인스턴스 생성되고 주소 200이 저장된다.

s1 = new Score(); 하면 인스턴스 생성되고 주소 300이 저장된다. 이때 주소 200의 인스턴스는 가비지가 된다. (주소를 갖고 있는 레퍼런스가 없을때)

 

 

 

인스턴스와 레퍼런스 카운트

 

Score s1 = new Score(); 하면 Score의 인스턴스가 생성된다.

Score s2 = new Score(); 하면 Score의 인스턴스가 새로 생성된다.

s2 = s1; 하면 s1의 주소가 s2에 저장되고 기존 s2에 있던 주소는 Garbage가 된다.

 

 

 

public 클래스와 default(package private class) 클래스

 

Exam0610에서 동일한 패키지에 있는 X<<default>>, Y<<public>> 는 접근 가능하다.

sub 패키지에 있는 X2<<default>>는 접근 불가하고 Y2<<public>>, Z2<<public>>은 접근 가능하다.

 

 

 


 

조언

 

*SI에서 CRUD 만드는 건 역량 향상이 안된다.

*자바 문제집은 문제 풀기보다 이 클래스에 이런 메서드가 있구나 이런걸 경험하는 걸로 활용하라

*언어별 관례를 섞지 말라.

 

 

 

 


 

과제

 

/