[구디아카데미]DAY15 ★오버로딩, ★말 줄임표(ellipsis)

NA YE SOM·2023년 7월 19일
0

*오버로딩과 오버라이딩에 대하여 공부해서 다시한번 더 개념을 적립해야겠다.


-> 정수 1개를 받을 준비를 한다





-> 배열 선언, 배열 타입 맞추기


-> 보낸 인수의 타입이 중요
-> 값을 전달하는 개념이라 : 변수 이름이 같을 필요도 없고, 같아도 상관없음(이름은 중요하지 않음)

오버로딩(Overloading)


-> 하나를 주거나 두개를 주거나
-> INT를 주거나 상관없음

같은이름을 가진 메소드는 같은 기능을 쓰도록 하자

★ 면접) 오버로딩이 무엇인가?
같은 이름을 가지는 메소드가 여러개 있는 것입니다. (타입이나 개수는 달라도 됨)


각각을 하나짜리 메소드에 다시 보냄(double a)


-> 모두 double a를 부르는 것

말 줄임표(ellipsis)


타입은 동일하지만 갯수는 여러개일 수 있음


-> 원래는 오버로딩으로 print 3개 만들면 됨


-> int가 여러개인가 보다 생각 !


-> a는 배열이다

반환


-반환이 존재하는 경우 많이 쓰는 경우: getter (get prefix)


-> 인수없음




-> 홍길동이 print 됨



-> 실행결과가 method 호출할 곳으로 되돌아가서 답이 나옴


-> 메소드 호출시) 호출된 곳으로 값을 반환하는 것만 잘 보기!


-> string배열 반환


-> {중가로} 열어서 초기화

(1) 반환 값을 지역변수로 선언

반환하는 데이터는 1개

정수 1개, 실수 1개 -> 2개를 반환하고 싶다 (이런 문법은 없음)
-> 2개 이상 반환하고 싶을때는 2개를 하나로 모아서 압축해서 반환해야 함
->(2이상의 데이터를 하나로 모으는 방법을 써야함) -> 같은 타입의 데이터가 여러개면 : 배열 쓸 수 있음(타입이 다르면 class, collection framwork쓰기)

반환이 있으면 메소드 자체가 반환값으로 바뀜
(ex) getName 홍길동을 전달하니까 아예 바뀌어 버림

(2) ★ 반환값이 없는 경우 )


-> 양수만 출력하겠음


-> IF자체로 끝나면 좋은 코드가 아님

0보다 작으면 메소드를 종료하겠음

-> 0보다 작으면 실행되지 않는다
만족하지 않으면 return해서 끝내버림


-> else적지 않음

method의 종료조건만 쓰기

return이 method종료조건으로 사용되는 경우) return뒤에 값이 없음


-> 언제나 쓸 수 있는 건 없다

void 메소드 : 70% 차지 -> ★잘 쓰이는 문법!


java doc(자바독)

  • 메소드 : 기능-> 기능들을 모아서 관리할때 필요한 것 : class
  • 각 버튼 하나 : 메소드 한개씩 동작함(누를때마다)
  • 계산기를 모두 품고 있는 것 : class
    -> 계산기 클래스 만들고 더하기 메소드, 곱하기 메소드, 나누기 메소드 등 만들기


/** + enter


*java doc
-> 자바 문서를 적는것, 남들에게 보여주기 위해서



-> 반환 값의 type 적기

static 없이 적기


-> 소수점 2개 받아오기


파라미터 : double a, b
숫자 2개 주면 1나 받는 것


@param : 파라미터
@return
-> 메소드 보고 인식해서 자동으로 넣어줌

-> 얼마를 return하면 성공, 얼마를 return하면 실패(설명을 return쪽에다 적기)

-> 메소드 먼저 만들지 않고 class 먼저 만들고


객체화 작업(class를 객체로 만들고 객체를 이용해서 method부르기(호출))

메소드를 Class안에다가 넣어서 (아직 class 실행할 수 있는 상황이 아님)
-> class안에 있는 메소드 호출 시) class를 변수로 만들기
-> class를 메모리에 얹히기(객체화 작업)
=> class를 객체로 만들기!

MainWrapper 는 ex01만 부르면 되었음

-> calculator 실물 계산기가 아니라 "설계도"임
-> 설계도를 보고 "계산기" 만들기
= class를 보고 "객체"(실제 계산기)를 만들기
-> 우리가 실제로 사용할 수 있는 건 객체임

  • 웹페이지 :
    회원 1명이 들어올때마다 class하나로 만들기 -> 회원을 객체로 부름
  • 게시글 :
    정해진 내용 class 설계 -> 게시글 나올 때마다 객체화 시켜서 사용

클래스 이름 = 객체의 타입

객체 이름 = 변수



<라이브러리 회사가 하는일>

  • 클래스를 jar 파일로 만들수있음(클래스를 팔수있다 : 파일로 만들어서 팔기)
  • calculator를 불러들여서 쓸 수 있음
    -> 남들이 calculator 쓰고자 할때 : 실행파일만 줌
    (실행파일 확장자 : class)
    -> 같은 이름의 class 파일이 생겼을 것임


-> 회사홈페이지 이름


-> 회사홈페이지 이름 거꾸로 적기


-> ctrl + 드래그 (move)

jar 파일 만들기

project 선택 + 우클릭


-> 내보내기(export)


-> 자바 src 코드는 내보내지 않고 실행파일 class files만 내보낸다

-> 오픈 소스의 경우 ) code도 내보낼 수 있음

Runnable JAR : exe 파일 만들어줌
java가지고 윈도우 화면 만들 수 있음


kr.co.gdu ( .이 폴더 밑에 폴더 만들기)


-> class 파일만 있음

-> 자바 라이브러리(java library)


실행파일 : bin 폴더
라이브러리 : lib 폴더 **


-> 내 프로젝트 my_prj 만들기

라이브러리 사용하고자 할때)

지금까지 사용한 것 : 설치한 자바 라이브러리들 (JRE System Library)


-> String, System 등 class파일 써봄

-> 외부라이브러리 : third party(외부업체)에서 만든 라이브러리

(calculator를 불러다 쓰고 싶을때)

  • 최종 메뉴 : Build pass


-> Add external Archives (외부 jar르 파일 추가)








-> 별도로 참조하는 Libraries 생김

-> calulaotr.jar안에 class를 쓸 수 있음


-> ctrl + space
-> import kr.co.gdu.Calculator; - 쓸 수 있음


-> calculator 불러서 쓰는 것(만들어서 쓰는 것 아님)

-> 라이브러리 불러다 쓰기 (build path 잡아서 쓰는것)


필드(field) : 객체가 가지는 고유의 값, 해당 필드는 저장시킬 수 있다. class안에 넣을 수 있는 것


-> 누적이 가능한 계산기(숫자를한개씩만 넘김)

addition에다가 숫자 1개만 넘기면 누적함



-> field 는 변수임 (주인이 class인 변수)

-> a,b 는 메소드 것임

-> 변수가 선언된 위치 모두 메소드 였음
-> 위치만 바꾸면 필드(field)됨
-> 변수를 클래스(class)에 선언함

모든 메소드가 공유해서 선언할 수 있는 값 : 메소드 마다 선언하는 변수는 메소드에서만 쓰도록 선언함


-> 각 메소드별로 쓰기 위해서 선언함

필드는 모든 메소드가 공통으로 사용할 수 있음


-> 누적이 되는 계산기


-> 참조타입일때 값이 없는 것 : null

0,0.0, false (기본타입)


-> 선언한 위치 : class(더이상 변수가 아니라 필드라고 부름)

-> 0.0(자동으로 초기화 주지 않았지만 value에 0이 들어가있음)

더하기를 누른다 (addition 메소드 호출)

-> 숫자 3 더했다
-> 원래 value에 넣기


-> 필드(파란색)


-> return이없음(@return안나옴)

br :HTML 태그 중 하나 (웹 화면 구성 : 줄바꿈)
-> 이건 HTML 화면으로도 가능하다


-> 태그 (문단, 글자 기울이는 태그 등등)

-> 계산 결과 보는것


★★★
1. class 기반으로 객체를 만들기

-> class 가 타입이 됨

2. 객체를 가지고 매소드 호출가능

-> 메소드 호출

필드는 모든 메소드가 공유할 수 있는 변수이다.
선언은 클래스에서 하기!

객체마다 값이 다르다

-> 하나의 클래스로 다른 객체를 뽑을 수 있다(객체마다 다른 값을 가지고자 할때 필드값을 활용할 수 있다)
(ex) 학생 : 객체 -> 이름(객체가 가지는 고유의값) : 필드에 저장


선언된 class
class 안에 넣는 것 : 2개 ( 1. 필드 2. 메소드)

  • 필드 private - 나만 볼 수 있음(나만 접근해서)(class안에서만 접근가능)
  • 메소드 public - 누구나 볼 수 있음(누구나 접근해서)(class바깥쪽에서도 접근가능)

access_modifier


-> 거의 private으로!


-> 파라미터 값을 받아와서 해당 아이디를 필드값으로 쓰겠음


-> 반환 타입


getId는 필드값 Id임



유저의 id : admin

객체이름 u
객체를 이용해서 호출 u.setId
setId("admin") 인수 admin

String userId(파라미터에 저장되어있음)


-> 호출이 가능한 이유 : public


-> 필드랑 메소드 접근할 때 : 객체 . 필드, 객체. 메소드


-> u. 뒤에 안보임(이유: private때문에)


-> private없으면 접근가능


-> 필드에 직접적으로 접근하는걸 '지양' => 정보은닉


-> 객체가 가지는 값은 숨기기
-> 데이터 안전하게 보관할 수 있는 방법이 없음

(ex) 아이디는 5글자 이상이어야 됨
-> 정보 은닉 깨지면
-> 5글자 아이디 저장될 수 없음

-> private이 없는 상태에서는 막을 수 없음
-> 잘못된 데이터를 전달하더라도 저장이 안되게 막는것이 없음
-> 접근경로에 의해서 데이터 유효성 담보가 안됨(데이터 안전하게 보관이 불가능)
-> 꺼내보는것보다는 누구나 정보를 바꿀 수 있음(필드값을 바꿀 수 있음)


-> 메소드를 부름 : userId에 "야"저장

-> return은 메소드 더이상 하지 않겠음

  • 필드로 직접 들어갈 수 있게하는경우는 거의 없음
    -> 특정 메소드를 통해서 전달하는 방법을 써야함

-> private은 field , public은 method

-접근권한 안 적었을 때: default


-> 직접 접근을 막기

대신 전달할 수 있는 메소드 만들기(직접 전달은 안됨)


-> 30이 필드까지 파라미터 거쳐서 갈 수 있음

age가 얼마인지 꺼내는 method

  1. class객체를 만드는 작업
  2. method호출하는 연습
  3. method와 field는 접근권한을 다르게 준다
  • field : private
  • method : public


(필드값 직접 확인하는건 막혔음-> private이라서 )
(메소드를 통해서)
(1) 외부로부터 값 받아와서 필드로 전달 - setter
(2) 필드값을 외부로 반출시켜줌 - getter

(1) setter


setter를 통해서 저장시킬 수 있음

(2) getter


getId() 약속
return id를



-> 반환타입 없고 외부로부터 받아오는 파라미터만 있음
-> 반환타입 없을 때 적는 것 : void



-> 외부로 부터 전달된 값을 param에 전달

setter는 공통적으로 반환타입 없는 void임


-> 정보은닉을 위해서는 필연적으로 getter, setter 존재

★ 실무) 클래스 만들줄 알고 메소드 넣을 줄 알기!


-> 클래스가 나눠져있을때 자유롭게 주고받을 수 있는건

public 뿐임



id, age 부를 수 없음


-> class라서 객체라고 부르는것 (변수라고 불러도 됨)


-> id 랑 age 저장(setter, getter부르기)

★★★ "객체"로 만들어서 저장하는 것!(파이널 프로젝트에도 들어감)

-> 변수 혼자만 돌아다니는 경우 없음
-> 2개의 데이터가 묶인 것(SQL 쿼리문으로 보이면 INSERT VALUES 돌릴 수있음 : DB 삽입) (DB삽입할때 변수하나만 삽입하는 경우없음)

  • Getter 만들기
  • Setter 만들기


입금, 출금, 계좌조회, 이체 기능을 제공하는 클래스

4개의 method
입금, 출금 , 계좌조회, 이체


-> see : 참고할 class
내부구현을 위해서 사용한 class가 별도로 있으면 see에 집어넣기

int 값 대신 long타입



-> 계좌번호 : 숫자로 저장하려고 하면 int로 저장할 수 없음(맨 앞에 0때문에 안됨)
-> String으로


-> long 타입 primitive 초기값이니까


-> String reference 타입 : 초기값 : null


-> 반환타입 없음(조회하고 끝남)

-> 받아서 사용할 것 없음(파라미터)


1.입금 -> 반환받을 값 없음(집어넣으면 끝)(void)


->deposit 메소드 동작하지 말고 끝났으면 좋겠다는 의미

-> 입금 메소드 누적시키기

  1. 출금 -> 실제 출금된 금액을 반환하는 것
    (이체 때문에)

-> 얼마 출금할지 받아와야 알 수 있음


-> 출금이 되지 않으니까 0을 반환한다

정상적으로 출금이 되면 ) parameter = return 값이 같음
그렇지 않으면) 0임



-> 50,000원 출금

-> return이 2개 있어서 좋은 코드는 아님

getter setter는 필드를 대상으로 만드는 것

(1) getter 2개 : balance를 외부로 확인

(2) setter 2개








-> 인수 2개(you,300000) 필요

transfer method 하나 만들기!

★ 테스트 해봐야 함

profile
개발자 velog

2개의 댓글

comment-user-thumbnail
2023년 7월 19일

글을 읽는 동안 많은 걸 배울 수 있었습니다.

1개의 답글