본문 바로가기
코딩 해보자

220625 객체 마스터하기

by friendlyboy 2022. 6. 26.

1시 독서실 입성

6시부터 공부 시작? 아니  7시.

8신가...

8시부터 지금까지 3시간동안은 그래도 쭉 했다.

그전까지 인터넷 쇼핑하고 난리..

공부 하라고!!!

진도가 나가질 않네

그래도 객체 생성해서 메서드 사용 하는 거 까지 이제 알았다.

나중에 한번 더 보면 마스터 할 수 있을 것 같기도.

 

재시험 봤던 자바 문제를 봅시다.

문제는 100 이하의 임의의 수의 배수 출력하기.

 

그리고 응용 문제로 출력된 배수의 개수와 배수의 최소값 최대값 구하는 문제까지.

 

먼저 틀은 이렇게 생겼다.

스캐너 클래스로 정수형을 입력 받는다.

그런데 입력 받을 임의의 숫자가 1~100 의 수가 아닐 경우 계속 반복해서 받아야 하므로

while 문을 사용하여 반복해준다. 그리고 입력값을 저장할 변수 int num =0;으로 먼저 초기화 해준다. 이게 중요

그리고 while 문 안에서 입력 받는 것이다. 그러면 자동적으로 반복해서 입력받는 값이 num값에 초기화 되기 때문에

입력 값이 고정이 될 수 없다. 이게 완전 중요하다.

 

그리고 while문이 끝나면 num값의 배수를 출력하는 것이다.

 

자 다만 자바 프로그램은 메인클래스에서만 쓰는 것이 아니기 때문에

객체를 생성하고 메서드를 생성하고 그것들을 메인클래스에서 호출하는 개념으로 생각해야 한다.

그냥 메인 클래스에서 작업해서 출력하는 것은 C언어에서 사용한다고 한다. 

우리는 자바를 배우고 사용할 것이기 때문에 이렇게 하는 습관을 들여야한다...고 강사님께서 말씀하셨다..

하지만 나는 아직도 객체와 메서드를 제대로 사용할 줄 모름 ㅎㅎ;

 

일단 Ref라는 참조 클래스를 만들어 두었다.

 

그안에 메서드가 들어가 있는 틀을 먼저 짜 두었다

 

while문 안에서  입력 받을 숫자의 범위를 2~20까지로 지정하였다.

입력 받으면 스캐너 클래스 닫고 멈춤!

빠져나간다.

하지만 그게 아니라면 2~20 사이의 올바른 값을 입력하세요로 반복 되겠지.

지금 보니 왜 else가 없는지 모르겠군?

 

그 밑에는 객체를 생성해준다.

객체를 밑에서 더 자세히 적어보자

Ref            ref          =          new         Ref(         );  <- 이것이 바로 객체 생성. // 참조 클래스로 들어가는 입구라고 보면 된다.

참조클래스 변수        =      새로운객체  생성자(인수);

사실 이렇게 적어서는 잘 모르고, 그냥 외워버려야했다

대문자 소문자 = 새로운 대문자 이렇게 ㅎㅎ;   그리고 (인수)   <- 얘는 매개변수라고도 부르고 메인클래스에서 참조클래스로

전달되는 값이다. 

엄마가 아이한테 돈을 주면서 심부름 해와~~~ 이거랑 똑같다.

메인클래스가 참조클래스한테 값을 주면서 이거 계산해와~~~~ 이렇게 시키는 거다.

그걸 받는 얘가 오른쪽에 public Ref(int num)이다.

num이 어떤 건지 모르기 때문에 친절하게 int 타입이라고 알려주었다.

 

 

 

오른쪽를 보면 private int num;이라는 글자가 생성됐다.

이거 뭐냐면, 왼쪽에 있는 num을 오른쪽에서도 다 쓸수 있게 !!

딱 표시를 해놓은 것이다. 그래서 num;은 파란 글씨로 보인다

public Ref(int num){   //객체 생성

this.num = num;    //객체를 초기화 시키는 공식

}

이거는 그냥 외우자. this.를 붙이는 이유는 나랑 똑같은 이름을 가진 애랑 나를 구분짓기 위해서 붙인것이다.

그래 성을 붙인거라고 하자. 진주랑 진주가 있으면 this.는 이진주고 다른얘는 0진주겠지.

 

자 객체 생성이 끝났으면 메서드를 사용해보자.

메서드 호출은 변수.메서드명( ); 그래서 ref.prnList( );를 적으면

ref에 위치한 prnList ( ){ 내용} 이 불려오는 것이다. 1차 심부름 끝!

조금 어려울 수 있는데 한번 코드를 작성해보자.

우리는 100이하의 수 중에서 어떤 입력한 수의 배수를 구하는 프로그램을 만드는 중이다.

그러면 입력 받은 수 부터 100까지 배수를 구해야한다.

그전에 입력 받은 수를 num = i 라고 두고, 100까지 그냥 쭉 나열해보는 것이다.

배수는 좀 이따가 구하자고.

그럴때 for구문을 사용하는 것이다. 반복해서 i부터 증가~

15를 입력했더니 15부터 100까지 쭈루루룩 나왔다.

 

배수는 구하기 쉽지, 15 로 나누면 나머지가 0이 되는 수니까 

계속 증가하는 i들 중에 15로 나누어서 == 0 이렇게 되는 식을 세우면 되지.

그리고 15는 우리가 입력한 num 값이니까

i%num==0 이 숫자들이겠구만!

쉼표도 넣어주었다. 이건 뭐.... 선택!

이제 번외로 배수의 개수 구하기 , 배수중에 최소값 구하기, 배수중에 최대값 구하기 이렇게 3개를 진행할 것이다.

그걸 좀 쉽게 하기 위해서 

배수의 개수는 int len 으로 정하고 이거는 그냥 100 나누기 num한 몫만큼이니까

쉽다.

 

int [ ] numAry = new int [3];  이런 배열을 하나 만들어 줬다.

numAry 라는 int 배열 은 , 3칸의 배열을 가진다. 이거구나 근데 왜 3칸을 주냐,

배수의 개수만큼 저장해야지. 그러니까 [len] 으로 바꿀 거야

또 for 가 나온다. int i = 0이고, i가 배열의 길이(몫의 개수) 보다 작으면, i가 0부터 증가한다네?

numAry[i] = num*(i+1); 이게 뭐냐 하니,

증가하는 배열 numAry =  입력 값 곱하기 (i+1) ; 

만약에 15를 넣으면, 몫이 6개니까 배열의 길이는 6이 되고, i는 0부터 5까지 증가하겠다

그러면 numAry[0,1,2,3,4,5] = 15*(1,2,3,4,5,6);

이 되겠네. 그럼 차례대로 출력시키는 Arrays.toString을 사용해서 나열하면

15 30 45 60 75 90 이렇게 나오네

 

len가 사라졌다? 

어디갔냐면 오른쪽 맨위에 private int len; 필드로 지정해줬다. 

쓸일이 많을 거 같으면 저렇게 대표를 지정해놓는 게 좋지.

private로 캡슐화 시키면 보안에도 좋고 아무데서나 쓰지 못해서 안전하게 사용 할 수 있다고 한다.

자 prnCount라는 메서드안에 배수의 개수를 넣어서 출력해준다.

메인 메서드에서 ref.prnCount(); 부르는거 있으면 안된다!

 

이제 최소값과 최대값만 구하면 되겠네.

최소값은 뭐, 배수중에 가장 작은수는 자기 자신이니까 num 값 출력하면 되고,

최대값은 배열중에 가장 뒷자리에 있는 수 구하면 되니까 배열값 - 1 하면 나오겠다. -1 하는 이유는 바로 배열은 0부터 자리하기 때문!

메서드안에서 메서드를 호출해서 한번에 출력해도 되긴 한다. 그 내용이다 이거는 ㅎㅎ

메서드 다 불러주고, 출력하면

이렇게 출력된다!

'코딩 해보자' 카테고리의 다른 글

220701 HTML 3일차  (0) 2022.07.02
220629 HTML 1일차  (0) 2022.06.30
220625 오늘은 간단하게 메소드 이용하기  (0) 2022.06.26
220621 일주일만에 복귀 , 큰일났다  (0) 2022.06.22
220613 오늘은 상담한 날  (0) 2022.06.14

댓글