*오버로딩과 오버라이딩에 대하여 공부해서 다시한번 더 개념을 적립해야겠다.
-> 정수 1개를 받을 준비를 한다
-> 배열 선언, 배열 타입 맞추기
-> 보낸 인수의 타입이 중요
-> 값을 전달하는 개념이라 : 변수 이름이 같을 필요도 없고, 같아도 상관없음(이름은 중요하지 않음)
-> 하나를 주거나 두개를 주거나
-> INT를 주거나 상관없음
같은이름을 가진 메소드는 같은 기능을 쓰도록 하자
★ 면접) 오버로딩이 무엇인가?
같은 이름을 가지는 메소드가 여러개 있는 것입니다. (타입이나 개수는 달라도 됨)
각각을 하나짜리 메소드에 다시 보냄(double a)
-> 모두 double a를 부르는 것
타입은 동일하지만 갯수는 여러개일 수 있음
-> 원래는 오버로딩으로 print 3개 만들면 됨
-> int가 여러개인가 보다 생각 !
-> a는 배열이다
-반환이 존재하는 경우 많이 쓰는 경우: getter (get prefix)
-> 인수없음
-> 홍길동이 print 됨
-> 실행결과가 method 호출할 곳으로 되돌아가서 답이 나옴
-> 메소드 호출시) 호출된 곳으로 값을 반환하는 것만 잘 보기!
-> string배열 반환
-> {중가로} 열어서 초기화
반환하는 데이터는 1개
정수 1개, 실수 1개 -> 2개를 반환하고 싶다 (이런 문법은 없음)
-> 2개 이상 반환하고 싶을때는 2개를 하나로 모아서 압축해서 반환해야 함
->(2이상의 데이터를 하나로 모으는 방법을 써야함) -> 같은 타입의 데이터가 여러개면 : 배열 쓸 수 있음(타입이 다르면 class, collection framwork쓰기)
반환이 있으면 메소드 자체가 반환값으로 바뀜
(ex) getName 홍길동을 전달하니까 아예 바뀌어 버림
-> 양수만 출력하겠음
-> IF자체로 끝나면 좋은 코드가 아님
0보다 작으면 메소드를 종료하겠음
-> 0보다 작으면 실행되지 않는다
만족하지 않으면 return해서 끝내버림
-> else적지 않음
method의 종료조건만 쓰기
return이 method종료조건으로 사용되는 경우) return뒤에 값이 없음
-> 언제나 쓸 수 있는 건 없다
void 메소드 : 70% 차지 -> ★잘 쓰이는 문법!
/** + enter
*java doc
-> 자바 문서를 적는것, 남들에게 보여주기 위해서
-> 반환 값의 type 적기
static 없이 적기
-> 소수점 2개 받아오기
파라미터 : double a, b
숫자 2개 주면 1나 받는 것
@param : 파라미터
@return
-> 메소드 보고 인식해서 자동으로 넣어줌
-> 얼마를 return하면 성공, 얼마를 return하면 실패(설명을 return쪽에다 적기)
-> 메소드 먼저 만들지 않고 class 먼저 만들고
메소드를 Class안에다가 넣어서 (아직 class 실행할 수 있는 상황이 아님)
-> class안에 있는 메소드 호출 시) class를 변수로 만들기
-> class를 메모리에 얹히기(객체화 작업)
=> class를 객체로 만들기!
MainWrapper 는 ex01만 부르면 되었음
-> calculator 실물 계산기가 아니라 "설계도"임
-> 설계도를 보고 "계산기" 만들기
= class를 보고 "객체"(실제 계산기)를 만들기
-> 우리가 실제로 사용할 수 있는 건 객체임
클래스 이름 = 객체의 타입
객체 이름 = 변수
<라이브러리 회사가 하는일>
-> 회사홈페이지 이름
-> 회사홈페이지 이름 거꾸로 적기
-> ctrl + 드래그 (move)
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를 불러다 쓰고 싶을때)
-> Add external Archives (외부 jar르 파일 추가)
-> 별도로 참조하는 Libraries 생김
-> calulaotr.jar안에 class를 쓸 수 있음
-> ctrl + space
-> import kr.co.gdu.Calculator; - 쓸 수 있음
-> calculator 불러서 쓰는 것(만들어서 쓰는 것 아님)
-> 라이브러리 불러다 쓰기 (build path 잡아서 쓰는것)
-> 누적이 가능한 계산기(숫자를한개씩만 넘김)
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으로!
-> 파라미터 값을 받아와서 해당 아이디를 필드값으로 쓰겠음
-> 반환 타입
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
(필드값 직접 확인하는건 막혔음-> private이라서 )
(메소드를 통해서)
(1) 외부로부터 값 받아와서 필드로 전달 - setter
(2) 필드값을 외부로 반출시켜줌 - getter
setter를 통해서 저장시킬 수 있음
getId() 약속
return id를
-> 반환타입 없고 외부로부터 받아오는 파라미터만 있음
-> 반환타입 없을 때 적는 것 : void
-> 외부로 부터 전달된 값을 param에 전달
-> 정보은닉을 위해서는 필연적으로 getter, setter 존재
★ 실무) 클래스 만들줄 알고 메소드 넣을 줄 알기!
-> 클래스가 나눠져있을때 자유롭게 주고받을 수 있는건
public 뿐임
id, age 부를 수 없음
-> class라서 객체라고 부르는것 (변수라고 불러도 됨)
-> id 랑 age 저장(setter, getter부르기)
-> 변수 혼자만 돌아다니는 경우 없음
-> 2개의 데이터가 묶인 것(SQL 쿼리문으로 보이면 INSERT VALUES 돌릴 수있음 : DB 삽입) (DB삽입할때 변수하나만 삽입하는 경우없음)
4개의 method
입금, 출금 , 계좌조회, 이체
-> see : 참고할 class
내부구현을 위해서 사용한 class가 별도로 있으면 see에 집어넣기
int 값 대신 long타입
-> 계좌번호 : 숫자로 저장하려고 하면 int로 저장할 수 없음(맨 앞에 0때문에 안됨)
-> String으로
-> long 타입 primitive 초기값이니까
-> String reference 타입 : 초기값 : null
-> 반환타입 없음(조회하고 끝남)
-> 받아서 사용할 것 없음(파라미터)
1.입금 -> 반환받을 값 없음(집어넣으면 끝)(void)
->deposit 메소드 동작하지 말고 끝났으면 좋겠다는 의미
-> 입금 메소드 누적시키기
-> 얼마 출금할지 받아와야 알 수 있음
-> 출금이 되지 않으니까 0을 반환한다
정상적으로 출금이 되면 ) parameter = return 값이 같음
그렇지 않으면) 0임
-> 50,000원 출금
-> return이 2개 있어서 좋은 코드는 아님
(1) getter 2개 : balance를 외부로 확인
(2) setter 2개
-> 인수 2개(you,300000) 필요
transfer method 하나 만들기!
★ 테스트 해봐야 함
글을 읽는 동안 많은 걸 배울 수 있었습니다.