JAVA

210802(월) 자바 10일차 - heap / DTO... / 멤버숙제 / 초기화 / 리턴 / 생성자 / this / 스캐너 / varargs / 샐러리숙제 / 리터럴

구름이팡팡 2021. 8. 2. 09:48
728x90

cf) S.O.L.I.D = 클래스의 속성(캡슐화, 1인분단위(문제를 해결할 수 있는 가장 작은 단위) ...)

<heap 영역>

- new 연산자로 생성됨

- 이름 부여가 안되고, 주소로밖에 접근이 안됨~!!!! 갖고 있는 주소를 참조한다!

 

<DTO, VO, Service, Main 나누는 이유>

cf) 클래스는 항상 1인분 단위로 짜기

MemberDTO.java --->1인분데이터만 저장하는 역할, 1인분 뜻하는 용어임: Data Transfer Object-->한꺼번에 객체단위로 움직인다는 말이다! , Value Object
ex) MenberVo ---> 오로지 데이터저장, 메뉴판
MemberService.java ---> 일을하는건 여기서 다!! 메뉴함수, 인서트멤버함수 등등
MemberMain.java   ---> 실행은 메인에서만!! new 생성해서 실행하는 것만 함!!

 

cf) DTO - service - main 클래스 파일 구조 이해

: 서로 객체생성으로 연결해놨기 때문에 main함수가 하나만 필요한 것~!!!!

main 함수 외에는 그냥 실행하기위해 연결되어있는 상태!!

나눠서 처리할때

이 세개의 클래스에 main함수는 하나여야 한다.

JVM이 main함수를 제일먼저 찾으니까!!! main함수는 무조건 하나있어야하니까!!!- main클래스파일에 service클래스파일을 연결시켜 놨으니까

연결연결되어있는 상태라서 

 

cf) 메인은 하는일없이 꼭 생성해야하는 클래스라서 이게 자바의 단점으로 꼽힘.

 

-->메뉴함수에 while 무한루프 돌려서 끝낼때 다시 main으로 돌아감

 


<Member 숙제>

- MemberDTO[] member=new MemberDTO[5]; //주소넣을 방만 잡은 것, 필드는 선언만 가능했나...?

===> 기본 null 값 가짐

 

- 예외처리가 구현부에 들어가면 호출부에도 같이 걸린다

service 에 있는 구현부 예외처리하면 ---> 메인 호출부에도 예외처리 필요

 

- 구현부 끝나면 호출부로 반드시 돌아온다!!! 

---> ※주의※

여기서 menu() 함수 호출은 위험 한 것!! 메뉴함수를 또 부르게되면 메모리에 meun 함수공간이 또 새로 잡힘

 

 

그냥 호출하면 구현부갔다가 호출부 다시 옴!!! menu() ---> insertMember() ---> 다시 자동 menu()

 

- 문자열은 등호 비교가 안되기 때문에 equals 쓰는 것~!!!!

 

cf) 삭제는 JVM만 가능, 삭제파트할때 null값 넣어서 연처럼 줄을 끊어버리면 나중에 알아서 JVM이 삭제한다는 것

삭제기능이 따로 없다

 

<초기화>

문자열: null

숫자: 0

 

<return>

반환값이 void로 없는데 return 쓰면 메소드를 벗어나라는 뜻!

값이 있으면 값을 가지고 호출부로 간다~!!!!!


<생성자(Constructor) 메소드>

- 원래 목적: 객체 초기화, 쓰레기 값을 없애려고~!!! <--- 근데 자바에서는 필드에서 초기화가 되기때문에 이 목적으로 안씀 그냥 있는거..?? 왜 있는거지.... => 근데 자동 호출로 클래스 new 쓸때 꼭 따라 붙기 때문에 생성자 주의해야 한다.

- 형태: public 클래스명(인수){}

---> 인수 없으면 디폴트 됨.

 

cf) 리턴타입 아예 없음아예 안씀. void 쓰면 일반함수가 되기때문에 주의!!! <--- 생성자의 가장 큰 특징~!!!! cf) void도 아무것도 없는 자료형으로 본다 생성자는 그냥 없는 것

cf) 클래스명과 같아서 눈에 딱 띈다

 

1. 생성자명은 반드시 클래스명과 동일하다.

2. 자동호출 - 클래스를 메모리에 생성 시(new 할때) <---강압적 호출불가능!!! 불러다 쓰는게 아니라 자동으로 나옴 클래스 new할 때

cf) 오버로드 된 같은 생성자끼리는 자기네들끼리 호출 가능

new 클래스 + 생성자 호출~!!!

 

ex) public SalaryService(SalaryDTO[] ar) {
this.ar = ar;
}

 

이렇게 생성자는 this가 중요한 것 같다.....................................ㅠㅠ

cf) 이런거는 가능, 또 같은 생성자끼리는 자기네들끼리 호출 가능

 

<this>

1. 생략가능
2. 자기 자신 클래스의 정보(reference: 참조값)를 갖고 있다.
===> 번호표 주듯이 클래스 호출 주소 번호표를 나눠서 갖고 있다
===> 생성자 Overload 인수에 따라 이용


---------------------------------------------------------------------------------------------------------------------------

★ 오버로드 된 생성자끼리의 호출: this()


1. Overload 된 다른 생성자를 호출할 때
2. 생성자에서 반드시 첫줄에 써야 한다.



* 수행순서 예시

 

3. returnType(결과형)이 없다. : void 쓰면 일반함수가 되기때문에 주의!!!

4. 생성자가 하나도 없을 시에는 자동으로 기본(default)생성자 호출 기본생성자(없으면 자동으로 만든다)

 · 기본생성자: new 클래스명 () <-- 이 괄호에 인수 없을 때 쓰는거

생성자도 () 괄호 비어 있음.

-> 인수가 없는 메소드들을 말함

 

 

cf) C++: 멤버변수 : 클래스 안에 속해있는 애들, 반드시 쓰레기값을 가지고 만들어짐

---> 자바에서는 필드라고하고 이미 초기화가 되기 때문에 사실 C++이랑 목적을 다르게 쓴다

 

생성자 vs setter : 하는 역할은 같은데 생성자가 호출1번만 하는것만 다름

 

 

cf) 생성자에서 인수를 객체로 받는 방법

: 클래스명.객체명

 

 

- 인자가 있는 생성자가 하나라도 있으면 기본생성자 자동으로 안만들어 진다.

- 모든클래스에는 생성자가 하나이상 필요하다


<Scanner>

Scanner scan = new Scaanner(System.in); // 시스템인: 키보드로부터 받겠다, 스캐너는 자바.유틸안에있음

Scanner scan = new Scanner(new File("data.txt")); //파일 객체 생성, 텍스트파일 읽어와~!!

cf) 텍스트파일이나 이미지 파일 가져올때 프로젝트 파일안에 넣어야함. src는 자바만~!!

 


 

<varargs(Variable Argument)>

: JDK 5.0에서 추가 : 통일된 인수의 자료형에 인수(매개변수)의 개수를 자유롭게 구현 : 내부적으로 배열화 작업으로 처리해 준다.

 

우리가쓸일은 거의 없고 아마 자바가 그냥 만든거를 자주 볼 것이다~!!!


<샐러리 숙제>

메인에 객체 배열 만들었을 때....!! 생성자로 쓰는 방법

주소를 준다

main의 ar과

service의 ar은 각각 다른 것(변수명은 달라도 상관없다) 

인수의 자료형이 중요한것~!!!! ---> * 자료형: 1.기본형 / 2.객체형 / 3.배열형:클래스명[]★이거 잊지 말기

main에서 주소를 주면 service에서 이걸 받아서 저장한다.

이렇게 DTO에서 입력을 받아버려도 됨~!!!!!

- decimalformat 으로 점찍으면 문자열됨. 메소드에서 이용할 경우 반환값 스트링으로 바꾸면 된다

- 값 수정은 세터로 해야함!!!! ---> new 하면 메모리가 또 만들어지는거라 쌓인다---> 비효율적이다...!


<리터럴(literal)>

 

-데이터종류

1. 정수형 리터럴 : 25, 16, -125

2. 실수형 리터럴 : 43.8, -25.7

3. 문자형 리터럴 : 'A', 'a', '0'

4. 문자열 리터럴 : "A", "a", "0"

 

-> 유일하게 String은 문자열 리터럴 생성이 가능하다. (new 안쓰고)

- 주의점: 똑같은 문자열 리터럴은 메모리에 1번만 생성된다! 버퍼드리더로 들어오면 그냥 그거 쓴다고 한 것 같음...

new연산자는 매번 생성된다

cf) 힙영역은 이름없고 주소~

↓ 이렇게 된다. 그래서 둘이 참조값이 같다고 인식된다!!! 문자열도 물론 같다.

vs new 연산자는 메모리에 각각생성되어 c와 d는 참조값이 다르다고 인식, 문자열은 같다.

cf) 참조값: 주소?!

=> 무조건 new 연산자를 쓰면 메모리에 계속 생성된다.

 

cf) 싱글톤 - DB

한번 연결해놓으면 꾸준히

한번만 만들고 계속 재활용 하겠다는 얘기, 싱글~ 한번만~!

 

 

cf)

 

728x90