본문 바로가기
JAVA

2023년 03월 11일 - 셋째 주 수업!

by 용굥이 2023. 3. 14.

이제 셋째 주 수업 진행했다..

점점 어려워 지고 있는게 보인다

왜냐? 이번 셋째 주 수업한 내용에 함수가 들어가있거든 ㅎㅅㅎ

클래스 함수 메소드 요런거,,

이제부터 복습을 하면서 한번 써보겠슴다..!!

ps. 검은색 화면으로 바꿈 간zl나게 ㅎㅋ

 

이번엔 반복문으로 for문을 배워보았다.

<반복문 for 문의 기본형태>

for(초기치; 조건문; 증가치) {

...

}

위에 나와있는 내용은 for문과 while 문을 비교하기 위해 두개를 구현해 놓았다.

결론적으로 보면 두개 같은 값이 나온다!

0부터 9까지 순서대로 나타나게 하는 내용인데 두개 작성한 길이를 보면 for 문이 좀 더 짧고 편하게 작성할 수 있게 되어있다.

 

 for 문 : 주어진 조건식이 true 가 되면 빠져나간다.

좀 더 간편하게 구현할 수 있으며, 반복횟수가 명확할 때 사용한다.

 

while 문 : 조건식이 true 인동안 실행이 되고, false 가 되면 빠져나간다.

주로 횟수와 상관없이 조건식을 만족할 때 까지 반복하는 작업을 할 때 사용한다.

 

for 문을 사용해서 구구단을 구현하는 작업을 해보았다.

먼저 조건을 걸어주었다.

2단으로 걸어서 작성해 준 다음, 0으로 초기화를 하여 9 보다 작을 시 1개씩 증가하게 끔 한다.

num 이라는 변수에 9보다 작다는 조건을 걸어준 i 에 + 1 을 해주어 9까지 곱할 수 있게 구현을 해주었다.

2단만 만들어서 출력을 시켜주었다.

출력 결과

2단만 출력시켜주었을 때 출력이 잘 된 걸 확인할 수 있다!

이렇게 구구단을 만드는걸로 2단부터 9단까지 구현해보는걸로 실습을 진행하였다.

대부분 작성을 할 때 i로 시작을 하고, 나도 i 로 작성을 대부분 시작하려고 하는데 위쪽에 i로 구현을 한번 했어서 a, b로 작성을 한 것이다!

 

0으로 초기화를 시켜준 후 2단 부터 9단까지 총 8번을 돌기때문에 a < 8 로 작성을 해서 뒤에 후처리문까지 작성해 주었다.

32번 행에 단이 바뀔 때마다 몇단인지 표시되게끔 해놓았다.

아래에는 1부터 9 까지 수를 넣어주어야 하는 걸로 작성을 한 후 출력할 때 어떻게 출력을 할 것인지에 코드를 작성해 주었다.

출력된 결과는?

출력결과

시작되는 단에 몇단인지 표시를 하는 내용, 1부터 9까지 곱하는 수가 잘 들어가서 출력이 된 걸 확인할 수 있다.

 

다음 실습으로는 abcdefghijk 를 변수에 넣어서 각각 하나씩 출력되는 걸로 실습을 해보았다.

작성한 코드를 살펴보면 반복문 for 문을 사용해서 작성을 하였는데, 그 전에 str 이라는 변수에 내용을 넣은 후 코드를 짜주었다.

보면 length 와 substring 을 사용한 걸 확인해 줄 수 있다.

length 를 사용한 이유는!

만약 저 변수에 넣은 알파벳들이 바뀔 경우에 코드를 또 변경을 해준다면 매우 번거로운 일이 될 것이다.

하지만 length 를 사용해 준다면 어떻게 바뀌든 그 문자열에 맞는 길이를 받아와주기 때문에 또 수기로 변경을 해 줄 필요가 없다!

substring 을 사용한 것은 문자열을 잘라주기 때문에 사용한 것이다.

첫번째 a 부터 k 까지 + 1 로 전부 하나씩 출력하는걸로 코드를 짜준 후 출력을 해주면?

원하는 출력방식으로 출력이 잘 되었다!

 

다음으론 반복문을 중지시킬 때 사용하는 continue 를 알아보았다.

continue 를 만나면 현재 해당되는 반복문을 탈출하여 다음 반복을 이어서 한다.

1부터 10까지 출력을 하는데 홀수만 표시하여 출력하는걸로 만들어 보았다.

코드를 확인해 보면, if로 2로 나누었을 때 나머지가 0일때 continue 를 만나서 다시 위로 올라가서 계속 진행을 한다 라는 조건을 걸어주었다.

출력결과를 확인해보면?

홀수가 잘 출력된 것을 확인 할 수 있다.

여기서 하나 더 확인할 것이 있다!

'continue 전' 이라는 말이 출력을 하게 해 놓은게 있는데 이것은 출력문이 continue 뒤로 가면 오류가 뜬다.

이유는 continue 를 만나서 올라가기때문에 애초에 만나질 않아서 오류가 나는 것이다!

 

다음으론 1부터 99까지 홀수만 더하는 방식으로 코드를 짜주었다.

코드를 살펴보면 초기문을 잡아주고 100 미만인 99로 잡아준 후 증가치를 잡아주었다.

새로운 변수 b를 생성하여 a 에 1을 더해주었다. 이유는 a 는 100 미만으로 잡아주었기 때문이다.

a 에 1을 더한 수에서 2로 나눈 나머지가 0일때 continue 로 반복을 탈출해 위로 다시 올라가서 홀수만 출력한 후 더한 숫자를 출력하게 만들어 주었다.

출력결과가 잘 나온걸 확인할 수 있다!!

 

이제 실습으로 넘어가서 입력된 주소에 띄어쓰기를 없앤 후 출력하는 것을 해보았다.

코드 작성된 것을 한번 보자면~~!

address 라는 변수를 작성하여 주소를 입력해 넣었다.

그리고 for 문을 사용하기 전 tempAddress 라는 변수를 하나 공란으로 만들어 준 후 for 문을 작성했다.

for 문에 주소 문자열 길이를 받아서 i 변수에 1을 더해주는 변수를 하나 더 만들어주었고,

subaddress에 equals 메소드를 사용해서 공백일 때 if 문으로 조건을 달아준 후 조건문이 실행되게 하고 공백이 아닐 때 넘어가서 실행을 하게 만들어준다.

조건문이 실행되면서 새로운 문자열에 넣어주어 출력을 하게 만들면 띄어쓰기가 없어지고 문자열이 모두 붙어서 출력이 된다.

출력 결과

for 문에 반복문을 중지시키는 continue 를 알아보았는데, 반복문을 중지시키는데 continue 말고 break문이라는 것이 있다.

break 문은 while 문에서 사용되는 제어문이다.

그렇다고 꼭 continue 는 for 문에 쓰고 break 문은 while 문에 쓰라는 법은 없긴 하다.

여기서 continue 와 break 문의 차이점을 확인해 보자면!!

continue 문은 탈출을 한 다음 다음 반복문으로 넘어가게 만들어준다.

break 문은 다음 반복문으로 넘어가지 않고 아예 탈출을 해버린다.

 

예를 들어서 1부터 10까지의 숫자 중 3을 조건으로 실행을 한다면

continue 는 3일 빼고 4부터 조건에 맞게 다시 반복문을 실행을 하고,

break 문은 3일때 아예 탈출을 하면서 멈춰버리는 것이다!

break 문을 사용해서 코드를 작성한 내용을 확인해 보면,

커피가 10잔, 돈을 300원 으로 잡아준 후 반복문을 통해서 0잔이 될 때까지 실행을 하다가 0잔이 됐을 때 break문을 만나서 중지하는 내용(14행)과 함께 실행이 중단된다.

출력 결과

출력 결과를 확인해 본다면 위에 나와있는 내용과 같이 출력이 된 걸 확인할  수 있다.

 

다른 내용으로 커피와 라떼 라는 변수를 만들어서 while문으로 반복문을 돌려서 위 내용처럼 차감이 되는지 확인해보기 위해 코드를 작성해 보았다.

코드를 작성해서 출력한 결과를 보면 break 문을 넣어서 출력이 하나만 된 것을 확인할 수 있다.

break문을 넣지 않으면 무한반복으로 출력이 된다.

알 수 있는 것은 break는 반복문에서 하나만 빠져나가는 것을 알 수 있다.

이젠 함수 메소드 클래스 쪽으로 들어갔다.

함수와 메소드는 같은 뜻을 가지고 있는데 상황에 따라 다르게 불린다.

간단하게 함수와 메소드의 차이를 말해보자면!

클래스 밖에 있는 걸 함수라고 부르고, 클래스 안에 있는 함수를 메소드라고 부른다.

우선 작성한 내용을 보면

정수형 자료형으로 두개의 변수를 작성해서 10, 20 값을 넣어주었다.

add 함수를 만들어 준 후 변수 두개를 넣어주고 17행에 함수와 자료형 변수명을 넣어주었는데,

17행에 변수가 들어가 있는 자리를 우리는 매개변수라고 한다.

int add(int num1 ...) -> return값 함수명(매개변수)

출력 결과

result에 출력 리턴값(반환값)을 넣어주고 출력을 한 결과는 위에 나와있는 것 처럼 잘 출력된 걸 확인할 수 있다.

 

이렇게 나오는걸 확인해본 후에 반환이 있고 없고, 매개변수가 있고 없고 메소드의 종류를 알아보았다.

반환값이 없다는 것은 return 값이 없다는 것인데 return 이 없다면 void 를 입력하고 시작한다.

여기서 알아야 하는 것은 return 값이 없네? 그럼 void를 써야지 가 아니라!!

return 값을 안쓸거니까 void 를 쓴다. 이것이다!

위에서부터 아래로 쓰면서 내려가는 것이니까 미리 return 을 쓰지 않겠다고 인지를 하고 코드를 작성해 나가는 것이다.

 

* 반환값(return) X 매개변수 X

여기서 리턴 자료형으로 void 가 들어가면서 return 반환값이 없다.

이렇게 작성한 후 메인에 작성해서 호출을 하기 위해 코드를 작성한다.

test1에 매개변수를 넣지 않고 호출을 한다면 출력결과는?

출력 결과

test1 메소드 호출 이라고 작성한 내용이 출력이 된다.

그럼 만약 괄호안에 10으로 넣어서 작성을 하고 호출을 시키면 어떻게 나올까?

 

* 반환값(return) X 매개변수 1개

호출
출력결과

10을 넣어서 호출한 결과 10이 출력되고 test2 메소드 호출 이라는 내용이 출력이 된다.

 

이번엔 반환값은 없고 매개변수가 2개인 경우를 한번 살펴본다.

* 반환값 X 매개변수 2개

코드를 작성해 준 후 두개의 매개변수를 호출시켜서 출력이 되면?

출력결과

매개변수값과 test3 메소드 호출 이라는 내용이 같이 출력된걸 확인할 수 있다.

 

반환값이 없는 코드를 작성하여 호출하였으니까 이제 반환값이 있는 코드를 작성해서 호출 해보는 걸 확인해본다면

void 가 들어가있던 자료형 자리에 int 형 자료형이 들어가 있고 밑에 return 100 으로 반환값을 작성한 걸 확인할 수 있다.

 

return 값에 100을 넣고 호출을 하여 출력을 하면 test4 : 메소드 호출 이라는 말과 100 중에 어떤 값이 출력이 될까?

출력 결과

자료형에 변수로 호출을 시켜본 결과 100 이 아닌 test4 : 메소드 호출 이라는 말만 출력되었다.

그럼 100은 어디에 갔느냐 하면? 아예 사라져서 없어진 것이 아니라 100 이라는 값을 머금고 있는 것이다.

int a 에 test4 인 호출값을 넣었으니 a 를 출력한다면 어떻게 될까?

a 를 출력한 결과 머금고 있던 100이 바로 출력이 된 것을 확인할 수 있다.

test4() 를 넣어서 출력을 해보았다!

이렇게 작성하여 출력한 결과!

test4 : 메소드 호출과 100의 값이 둘다 출력이 된 걸 확인할 수 있다.

여기서 확인할 것은, int a = test4(); 라는 값을 호출해서 출력하는 것 말고 앞에 호출해서 출력한 것 처럼 test4(); 를 호출해서 출력을 해도 값이 안나오는 것이 아니다.

 

이번엔 반환값이 있고 매개변수가 2개인 경우를 보는데 매개변수값 두개의 자료형이 문자형과 정수형으로 나누고,

이름과 인덱스값을 표시를 하게 해보았다.

출력결과

'홍길동'  이름과 1이라는 인덱스를 출력하는 것을 확인할 수 있다!

 

이렇게 확인하는 것 말고 확실하게 어떻게 작성하면 어떤걸 가져오는지 확인하는 것을 확인해보았다.

여러가지 방식을 가지고 만들어 보았다.

매개변수가 없는 형식과 매개변수가 있고 자료형이 있고, 갯수도 다르고 자료형도 다르게 만들어 준 뒤 호출을 해보았다.

각각 자료형에 맞게 작성을 하나씩 해주었고 출력을 해보면

출력 결과

이렇게 출력이 된다.

출력결과를 확인해보면 내가 원하는 방식대로 만들어놓은 메소드를 바로바로 가져와서 출력할 수 있다.

여러개의 메소드를 만들어놓고 내가 작성하면서 필요한 메소드를 만들어서 코드를 다시 짜는 것이 아니라 바로 가져올 수 있게 하는 것이 가장 좋은 장점인 것 같다.

 

다음 작성한 코드를 보면 알 수 있다.

코드 작성한 내용을 보면 위에 적어놓은 메소드와 밑에 호출한 내용의 순서가 같지 않지만 출력한 결과는 메소드에 맞게 출력된 걸 확인할 수 있다

출력 결과

출력결과를 보면 순서가 다르지만 그 메소드에 맞게 호출을 해서 출력을 하는 걸 확인할 수 있다.

넣은 수와 return 값이 잘 출력이 되었다.

 

다음으론 클래스를 배웠다.

클래스란? 객체를 정의하는 틀 또는 설계도라고 부른다!

클래스를 작성하기 위해 클래스를 작성할 곳과 그걸 호출해서 가져올 곳 두개를 만들어주었다!

class

Computer 라는 클래스를 메인과 나눠서 두개로 만들어 준 다음 코드를 작성해보았다.

정수형과 문자형으로 자료형을 넣어준 후 변수명을 넣어서 총 5개의 변수를 잡아주고,

showInfo 라는 메소드를 작성해 주었다.

작성한 변수 순서대로 컴퓨터에 맞게 제조년도, 제조사, CPU, RAM, GraphicCard 으로 출력이 되게 작성해 주었다.

 

다음 호출할 메인 클래스로 넘어가서 두가지의 제조사로 나뉘어서 그 조건에 맞게 넣을 수 있도록 작성해 주었다.

먼저 new 를 작성해서 새로 생성을 해준 후, c1, c2 변수로 넣어서 출력을 한번 해봤다.

생성하여 아무것도 없이 바로 출력을 하면 주소값이 출력이 된다.

이것은 new를 작성하여 새로 생성을 해주면 주소가 할당이 되는 것이다!

출력결과

각각 다른 주소값이 다르게 출력이 되는걸 확인할 수 있다.

 

주소값이 출력되는 것을 확인했으면! 이제 내용에 값을 넣어보았다.

c1, c2 에 cpu 라는 곳으로 각각 값을 넣어보았다.

코드 입력한 방식을 보면 ' . ' 을 찍고 그 뒤에 메소드 안에 작성한 내용 하나를 넣었는데 ' . ' 을 찍으면 메소드 안에 있는 내용들이 위에 이미지처럼 나타난다.

저기 나타나는 메소드 중 넣을 메소드를 골라서 내용을 넣어준 것이다.

보면 cpu 라는 메소드 하나만 값을 넣어주었는데, 값을 하나만 넣어주었을 때 출력이 어떻게 되는가?

showInfo 로 호출을 시켜준 뒤 출력하는 걸 확인해 보았다.

 

cpu 에 넣어준 값 제외하고 나머지는 자료형에 맞게 0 또는 null 로 표시되는 걸 확인할 수 있다.

* 자료형이 int 이면 0 으로 표시되고, String 이면 null 로 표시가 된다.

 

값을 일부만 넣으면 어떻게 되는지 확인을 하였으니 나머지값도 입력해서 넣어준 후 출력해주었다!

입력 / 출력결과

나머지 값을 넣어준 후 출력 한 결과 제자리에 맞게 잘 들어간 걸 확인할 수 있다.