2021. 1. 19. 18:43ㆍDev.Program/Java & Spring
< 클래스의 객체(인스턴스 생성) = 인스턴스화 >
p. 176
- new 키워드를 사용하여 생성할 인스턴스의 클래스명을 명시
- Heap 공간에 생성된 인스턴스 주소를 저장할 참조변수를 선언하고 해당 인스턴스 생성 후의 주소값을 저장
- 인스턴스 생성 후에는 참조변수를 통해 인스턴스 접근 가능
- ⇒ 변수명.멤버변수명 또는 변수명.메서드명() 의 형태로 접근
- ⇒ 단, 자신의 클래스 내의 변수 또는 메서드는 참조변수 없이 바로 접근
< 클래스 정의 기본 문법 >
[제한자] class 클래스명 {
// 멤버변수(인스턴스 변수) 선언
// 멤버메서드 정의
}
< 인스턴스 생성 기본 문법 >
클래스명 변수명(참조형변수) = new 클래스명();
교재 p175 (클래스 생성)
======== Person.java 파일 만들기 (밑에 체크 빼기)
P. 179
< 멤버 변수 = 인스턴스 변수 >
- 클래스 내부, 메서드 외부에 선언한 변수
- 해당 클래스 내의 대부분의 메서드에서 공통적으로 사용 가능
- 멤버변수(인스턴스변수) 선언
String name;
int age;
boolean isHungry;
- 평소 선언하던 int형이랑 변수 색이 다름! (Local variable) → 이건 나중에 설명.
- 선언 한 멤버변수는 어디서든 쓸 수 있다.
- isHungry 값도 그냥 쓰면 됨.
- 우리는 지금 class 를 만든거!
- Person 은 식별자. 식별자 규칙 그대로 들고옴. (첫글자를 대문자로 쓰는 건 관례)
======== Ex.java 파일 새로 만들기(main 메소드 체크!)
< Person 클래스의 객체(인스턴스 생성) = 인스턴스화 >
- pe까지만 적고 + Ctrl + Space 하면 Person 나옴. (같은 공간에 있기 때문에 뒤에 아무것도 안적혀있음(연한 회색글씨) → package 개념인데 아직 안배움)
- 뒤에서도 p만 적고 + Ctrl + Space 하면 Person 보여줌. (생성자 호출 → 나중에 배움)
- 이렇게 하면 인스턴스를 두개 만든거.
- p의 타입이 뭐다? Person 이다. (p2 도 마찬가지)
- age, isHungry, name 변수
- eat(), work() 의 메소드가 보임. (우리가 만든 인스턴스를 불러오는 것)
- 변수명이 파란색 → 우리가 만든 거구나!!
- Person 인스턴스의 이름, 나이, 배고픔 값 출력
Person 인스턴스의 메서드 work(), eat() 호출 해보기
⇒ 여기서 가장 많이 하는 실수!!
- print 는 출력되는게 있어야 되는데, p.work() 는 리턴값이 없으므로 출력될 값이 없음.
- 그래서 오류가 뜸!
- 그냥 p.work(); p.eat(); 이렇게 호출하면 됨.
교재 p178-179
- p와 p2 는 따로 관리되는 것을 알 수 있다!
- p 와 클래스명(또는 클래스타입)이 Person 으로 같지만 new 를 통해 인스턴스 생성을 각각 수행했으므로, 인스턴스(메모리공간)가 다르다!
- ⇒ 즉, 서로 다른 인스턴스(=객체)는 각각 다른 정보를 관리할 수 있다!
Ex 클래스 제일 끝 으로 가서 class 따로 만들어줌
( ⇒ 실무에서는 이렇게 안만들지만, 우린 연습이니까 편의상! 한번에 보기 위해서ㅎㅎ)
- 하나의 java 파일(소스 파일) 내에 여러개의 클래스를 정의할 수 있다.
- ⇒ 단, 파일명과 동일한 클래스를 제외한 나머지 클래스는 접근제한자를 빼고 정의함.
문제 ) 멤버변수 : 이름(name), 나이(age)
메서드 : cry() - 파라미터 X, 리턴값 X, "동물 울음 소리!" 출력
- 풀이 ) 클래스 끝 에서 만들기
문제 ) Animal 인스턴스 2개 생성 후 다음과 같이 초기화 및 출력
------ 인스턴스1(ani1)
이름 : 멍멍이, 나이 : 2
"동물 울음 소리!”
------ 인스턴스2(ani2)
이름 : 야옹이, 나이 : 3
"동물 울음 소리!
- 풀이 ) 다시 public static void main 안으로 들어와서 만들기
======== Ex2.java 파일 만들기(main method 체크 하기)
문제 ) 학생(Student) 클래스 정의
이름(name, 문자열), 반(ban, 정수), 국어(kor, 정수), 영어(eng, 정수), 수학(mat, 정수)
메서드
1) studentInfo() : 이름, 반, 국어, 영어, 수학 점수 출력
- 풀이 ) Ex2 클래스가 끝난 지점인 제일 끝에서 만들기
- s1 과 s2 인스턴스 생성
문제 ) getTotal() : 파라미터 X, 리턴타입 int ⇒ 국어, 영어, 수학 점수의 합 리턴
- 풀이 ) public void studentInfo() 끝나고 밑에 적어주기
- return kor + eng + mat; 도 가능
문제 )
- 풀이 ) public int getTotal() 끝나고 밑에 적어주기
총점과 평균을 구하는 다른 방법 ) 변수 없이 바로 받아 오기.
System.out.println("평균 : " + s2.getAverage(s2.getTotal()));
System.out.println("평균 : " + s2.getAverage(s2.getTotal()));
- s2.getTotal()가 제일 먼저 실행
- s2.getAverage(237); 이 되는거랑 똑같음!
> 총점과 평균 전부 주석처리!
studentInfo() 로 가기
하나의 클래스 내의 메서드에서 또 다른 메서드 호출도 가능
- 이름 만으로도 바로 사용 가능.
- (=자신의 클래스 내의 변수 또는 메서드는 참조변수 없이 바로 접근)
- ⇒ 앞에 s1. s2. 이런거 안붙여도 된다는 말입니다! (자주 하는 실수!!!)
- 클래스의 밖에서 쓸 때만 주소가 필요하다! (어디 있는지 모르니까~~)
- 평균도 똑같이 가능
- 이렇게 만들면 공통작업이 되기때문에 하나하나 안적어도 전체 출력이 가능함.
======== Test2.java 만들기. (main 체크)
문제 ) 은행계좌(Account) 클래스
멤버변수
1. 계좌번호(accountNo) - 문자열("XXX-XXXX-XXX")
2. 예금주명(ownerName) - 문자열("XXX")
3. 현재잔고(balance) - 정수 (21억까지만 저장가능ㅋㅋ)
- 풀이 ) Test2 제일 끝에 만들기
문제 ) 은행계좌 개설하여 다음과 같이 초기화 후 출력
계좌번호 : 111-1111-111
예금주명 : 홍길동
현재잔고 : 10000원
- 풀이 ) main 안에 적어주기
문제 ) main 안에 syso 주석 처리 하고 메서드로 만들어 주기.
1. 계좌번호, 예금주명, 현재잔고를 출력하는 showInfo() 메서드 정의
- 풀이 ) a1. 은 안적어줘도 됨.
- main 안에서 a1.showInfo(); 하면 출력값 확인 가능
문제 ) 2. deposit() 메서드
입금할 금액(amount, 정수형)을 파라미터로 전달받아 현재잔고(balance)에 누적
입금 과정(입금할 금액과 입금 처리 후의 잔고)을 다음과 같이 출력
" 입금할 금액 : xxxxx원 "
" 현재잔고 : xxxxx원 "
- 풀이 ) 클래스 안쪽에 적어주기
- main 에서 a1.deposit(5000); 적어주면 이렇게 출력값 확인 가능
> 앞서 했던 건 입금기능.
이제 할 건 출금기능.
문제 ) 우선 해야할 거! ( 이따가 잔고가 출금 금액보다 적으면 출금 안되는 것도 추가할 거 )
3. withdraw() 메서드(파라미터 O, 리턴값 O) : 출금기능
출금할 금액(amount, 정수형)을 파라미터로 전달받아
"출금할 금액 : xxxxx원" 출력 후
현재잔고에서 출금할 금액만큼 차감 후 현재잔고 출력
"현재잔고 : xxxxx원"
출금된 금액을 리턴
- 풀이 ) class 안쪽에 적어주기
- main 에서 a1.withdraw(3000); 적어주면 이렇게 출력값 확인 가능
- 50000원을 뽑으면 안나와야 되는데(잔고가 모자라니까), 나온다!!!
> 그래서 문제 ) 출금 금액이 잔고보다 많을 경우 제어 : 추가해주기
- 풀이 ) class 안 쪽에 적어주기.
- if 문에서 리턴을 안해주더라도 우린 int 형 리턴을 무조건 해야함.
- 경우의 수에 모두 리턴을 해줘야 함. (자주 하는 실수!!!!)
- return 0; 을 안해주면 오류가 난다! (return 0;필수)
- return amount;를 바깥으로 빼주고
- if 문 안에 amount 값을 0으로 만들어줌.
- ⇒ 이런식으로도 가능하다.
문제 ) 새로운 은행계좌 인스턴스 생성하여 사용해보기
- 풀이 )
'Dev.Program > Java & Spring' 카테고리의 다른 글
[Java] 오버로딩 / 가변인자 (0) | 2021.01.23 |
---|---|
[Java] 변수 선언 위치에 따른 분류 / 접근제한자 (0) | 2021.01.23 |
[Java] 메서드(Method) (0) | 2021.01.19 |
[Java] 2차원배열 (0) | 2021.01.19 |
[Java] 배열 (0) | 2021.01.19 |