[구디아카데미]DAY 17 Setter, Getter

NA YE SOM·2023년 7월 21일
0

*setter와 getter에 대해서 알 수 있었고 객체를 만드는 2가지 방법(생성자만 이용, setter를 이용)에 대해서 알 수 있었다.
-

-> 생성자(NEW 뒤에 호출하는 메소드 : 객체를 만드는)

-> Bank 클래스의 생성자 (1) 이름이 class와 같다 (2) 인수와 파라미터는 일반 메소드와 같다

(3)문자열 2개가 인수로 전달
(4) 생성자는 return이라는 개념이 없다


-> 필드값으로 저장하기 위해서
-> 객체를 만들때 하는일 : 필드값을 채우는 것

BANK 객체 만들고
INFO 메소드로 초기화

-> 필드로 보내주는 건 : this 키워드 사용
this.name (필드 ) = name(파라미터)

MainWrapper

-> 반환타입 없음


-> Bank class 모습 갖춰짐

-> Bank class 오류 없음

-> 생성자 (반환이 없고, 클래스 이름과 같다)

Bank
String
long


Bankaccount

(1)

(2) 필드값 적기

(3) this

->줄바꿈 되지 않도록


BankMember


-> 반환타입 x, 인수 x -> 파라미터 x

생성자 만들기 --> 필드값 채우기 --> 메소드로

bankaccount출력에는 bank의 내용이 출력되도록 하는 관계도 보기!

캡슐화

어디까지 내가 할건지 바운더리 정하기
(ex) bankmember의 name은 내가 출력하고 acc.info(account정보는 account에 맡긴다)

(1) 입출력

어제는 필드값 입력을 생성자, 출력은 info 메소드

오늘은 필드값 출력 - setter, 필드값 입력 - getter

-> 생성자 1개와 setter, getter 만들기


파라미터가 다른 여러개를 메소드를 만드는 것 : 메소드 오버로딩


-> 채울필요없음

자동초기화 대상
String 참조 타입 : 초기값으로 null값 가짐 name 도 tel 도 null


-> 이걸로 생성자 만들면 null 값임

-> 그래서 필드값이 null값이라 따로 저장하는것임(mainwrapper)

★setter 역할 : setter 반환없음 , set + 필드이름 , 해당 필드를 채워줄 수 있는 파라미터로 구성(정보입력)



-> 필드값으로 파라미터 전달

★getter 역할 : 필드값의 반환(정보출력)



-> 먼저, 내용이 비어있는 생성자 만들어줌


반환타입

getter의 이름 규칙


  1. 생성자 만드는 이유?

    -> 여기서 인수가 없어서 (MainWrapper의 BankMember () 인수가없으니까)


-> member에서 빼는 것 : 먼저 getACC 빼고 getBank 빼고 getTel 빼는것


-> 생성할 때는 내용은 없지만
뒤에 setter로 내용을 넣을 수 있음

★객체를 만드는 2가지 방법

(1) 생성자(CONSTUCTOR)

-> 생성자만 이용해서 값을 이용
(2) SETTER : 많이 씀

-> setter를 이용해서 값을 저장

-> 많이 쓰는건 2번
-> 필요한 것만 골라서 채울 수 있어서

-> 변수 11개 준비 못함


-> 객체 가지고 한명 저장할 수 있음
-> 여러개의 데이터를 하나로 모으는 수단 : 클래스(CLASS)
-> 파라미터 11개 만들어짐
(EX) 회원 정보 클래스 관리 : 회원번호, 이메일, 성별 ..
많은 정보가 들어감 -> 로그인시 필요한 정보 : 아이디, 비번만 저장
-> Setter이용해서 ID,PW 만 저장시키고 작업진행(모든 정보를 채울 필요가 없어서)


Transfer(이체)


-> 2로 바꾸기

member가 acc계좌를 가지고 있으니까 입금, 출금, 이체 모두 할 수 있다
멤버가 가지고 있는 은행계좌의 기능을 가져다 쓸 수 있도록 함

입금

출금 : 실제로 출금된 금액을 반환해주기


-> 파라미터(출금하고자 하는 돈 : long money)

(1)

-> 요청한 그대로 나갈 수 있음
(2)
10만원
-> 0이 나갈 수도 있음


-> 0으로 초기화

-> 없애기

*다른 방법


-> 정상적인 출금 가능 금액일때 )


-> 내통장에서 실제 출금된 금액만큼 상대계좌에 입금해주겠음

BankAccount의 transfer를 가져다쓸 수 있는 BankMemeber의 transfer를 만들기


-> 파라미터 2개 필요(bankmember, 금액) 필요


-> 0보다 작은지 조회할 필요가 없음

은행고객은 은행계좌의 입금 확인
->

-> 0보다 작으면 여기서 어차피 수행하지 않음


-> 실제 출금액(acc)을 받아와서 그래도 다시 반환하기
-> 0 아니면 money임


-> 사람에게 money 보내기 -> 입금하는 개념

-> 실제 출금된 금액이 그대로 넘어옴

이미 만들어진 bank멤버에 서비스 로직을 쓰는것
-> 사람이 사람에게 이체하는 구조
-> 사람이 가지고 있는 계좌정보 가지고 실제 이체하는 것
-> deposit과 withdrawl에 포함된 acc(계좌의 입금정보, 출금정보 서비스해서 하는것)

bankmember가 bankaccoutn가지고 있고, 그 정보를 쓸수있고
bankaccount는 bank를 가지고 있고 bank의 정보를 사용할 수 있다



getter와 setter 만들기

참조타입이라고 해서 getter ,setter 달라지지 않음




-> contact에 들어있는 homeTel가져오기
(집전화에서 연락처를 가지고 와야함 -> member.getContact.getHomeTel)


->우리가 웹사이트에서 보고 있는것 : 객체안에 객체안에 객체안에 ...
-> ★info 만들지 않고 getter호출하는 연습많이 하기!
★ getter와setter 가지고 동작 하는 라이브러리 회사도 많음
(나중에 getter setter이름이나 형식을 바꾸면 안되는 경우도 많음)
-> getter이름이 틀리면 라이브러리가 읽지 못함
-> 앞으로는 getter setter 쓰지만 만들지는 않을 예정임

주소 테이블 - 연락처테이블(1:다) - 회원 테이블


  1. driver의 getter와 setter 작업하기

*getter (반환하는 거니까)

  • 반환타입


-> booelan타입 잘못 만들었음


-> getter가 잘못되었음
(이름 규칙이 달라서)

(외우지않아도 됨) get + 필드명이 아님 ! -> isBestDriver()로!


-> 나중에 springframwork가 읽지 못함(getBestDriver로 되어있으면)

  • getter -> isEmpty(is있으니까 그냥 is)
  • setter -> setEmpty(빼버림)

boolean타입의 변수는 is로 시작하는 경우가 많음(prefix값)


24일 월요일

  • 프로그래밍 언어 활용 평가
  • 보충 : 객체 배열

25일 화요일
-프로그램밍 언어 활용 결과에 따른 보충

26일 수요일
-프로그래밍 언어 활용 결과에 따른 재평가

27일 목요일

  • 보충 : 객체 배열


-> null값 나옴


-> career, BestDriver 잘못 들어옴

career만 있으면 bestdriver인지 아닌지 결정됨



-> true가 isBestDriver로 들어가게됨

-> 호출하지 않았으면 할때 : private(메소드도)


->Car에 생성자 없을때 디폴트 () 생성자만듬


-> 메소드 호출결과 저장하는 a변수도 없고

-> () 파라미터도 없다

엔진이있는지없는지는 fuel값으로 알 수 있음

-> setEmpty 호출하지 못하게 막기
기름이 들어오면


setEmpty 호출 못하도록 private으로 바꾸기


-> 파라미터로 전달한 this.fuel값이 0보다큰지 체크해서 넘기기




0보다 크면 false


-> 초기화 잘못됨(fuel 기름이 없는데 비어있지 않다)


필드 3개
getter, setter 3개 -> 수정



-> driver 참조타입 Driver : 참조타입은 null값을 가짐

시동은 걸렸지만 운전수가 없어서 채우는 방법 : setDriver

-> 운전수 생김


-> 속도만 올라가지 않음



-> 먼저 누적시키고

-> 삼항 연산자 과정


-> 둘중 선택해서 쓰기

accel을 한번 밟으면 fuel(기름)이 얼마나 떨어지는가?

★소스코드를 주석으로 남길 필요는 없다 -> 설명을 주석으로!

빵집 구현(어려움!)

  • 객체안에 객체가 있지 않음




-> 빵집 세우기


-> 고객

->생성자로 구현(bakery 생성자 3개 전달), customer 생성자에 1개 전달


-> 6000원 냄, 2000씩 3개 , 잔돈 : 4000원


-> bakery 생성자, customer생성자
-> getter, setter는 할 수 있음


-> 빵 가격 2000원은 전달할 필요없음

값이 외부 요인에 의해서 잘못될 우려가 없어서 private => public으로 (final 상수)
-> getter와 setter안만든다


-> 먼저 판매가 되어야 구매가 된다(빵집에서 판매를 했을때 고객이 구매 가능)


둘이상의 return은 존재 x : 두개를 하나로 묶는 수밖에 없음(빵의개수, 잔돈)

-> return하는 클래스가 있어야 함


-> 빵잔돈


-> 생성자 만들기


bread받아서 this.bread에 저장



반환타입이 void가 아니라서 return안됨
(1)

(2) 둘다 null값으로


-> 요청한 만큼 count그대로, 잔돈 : money(낸돈) -빼기


-> 빵집의 빵이 준다

-> 빵집의 빵은 늘어난다 (빵은줄이고 돈은 늘리고 가격은 그대로)



구매자가 가지고 있는 빵(this.count)없다가 생김 + bc.getBread()

-돈은 두번 처리함
(ex) 10000원 내고 4000원 받기


-> 고객입장에서는 빵을 파는지 모르지만 일단 내는 것 sell(count, money)에 전달함

판매가 되는지 안되는지 여부는 customer가 아니라 bakery빵집이 체크

  • 외상


    -> null반환
    customer메소드의 bakery.sell 실행결과 null
    bc null
    -> 빵집에서 준거 null인데 빵집에서 빵, 잔돈 꺼냄

NullPointException(가장 많이 발생)


-> 예외 ) 문자가 발생했음

-> != null이 아닐때만

여러개 저장하는 객체(나중에 실무에서 사용하는 방식으로 배움)

profile
개발자 velog

4개의 댓글

comment-user-thumbnail
2023년 7월 21일

정말 잘 읽었습니다, 고맙습니다!

1개의 답글
comment-user-thumbnail
2023년 7월 21일

좋은 글 잘 읽었습니다, 감사합니다.

1개의 답글