본문 바로가기
JAVA

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

by 용굥이 2023. 3. 21.

3월 11일 어제 수업에 이어서 계속 진행을 해주었다.

 

값을 변경하기전에 새로운 함수를 만들어서 if 문으로 조건을 만들어주었다.

addRam(+=) 과 removeRam(-=) 이라는 함수 두개를 만들어 주었고 각각 ram 에 대한 바이트의 최대, 최소값을 지정해서 if조건문을 걸어주었다.

조건문을 걸어준 후 ComputerMain 클래스로 넘어가서 호출을 하고 출력을 했다!

입력 / 출력결과

c1 과 c2 에 입력한 내용에 맞춰서 출력한 내용을 보면 조건에 맞게 출력된 걸 확인할 수 있다.

c1

addRam : 8을 더함

rearRam : 3을 뺌

8을 더하고 3을 빼서 13이 출력됨

 

c2

addRam : 20을 더함

rearRam : 40을 뺌

20을 더하고 40을 빼서 최소 바이트에 벗어나서 오류 문구가 출력됨

 

조건에 맞게 출력을 하는 것도 확인을 하였으니 이제 실습을 시작하였다.

car 와 carMain 이라는 클래스를 새로 생성을 한 다음 세개의 회사명을 넣어서 모델명과 색상을 각각 넣어주는 실습을 진행하였다.

먼저 car 클래스에 자료형을 맞춰서  회사명과 모델명, 색상명을 변수로 넣어주었다.

다음으론 showInfo 라는 함수를 생성해 준 후 출력될 내용을 작성했다.

 

다음으로 carMain 클래스로 넘어가서 new를 작성해서 객체를 생성을 해준 후, 회사명과 모델명, 색상을 3개로 작성해준다.

작성을 한 다음 밑에 showInfo 를 작성해서 호출을 한 다음 출력을 해주면?

출력결과

원하는 내용을 입력해준 것 처럼 출력이 정상적으로 된 것을 확인할 수 있다.

내가 원하는 내용에서 변경된 내용을 작성하는 것도 실습에 추가가 되어 한번 만들어보았다.

car 클래스로 넘어가서 colorChange 함수를 생성해 준 뒤 if 조건문을 걸어서 색상을 변경할 수 있도록 만들어 주었고,

걸어놓은 조건 외에 다른 내용을 입력하게 된다면 ' 지원하지 않는 색상입니다. ' 라는 문구가 출력이 되도록 만들어 주었다.

함수를 잘 만들어주었으면 이제 carMain 클래스로 넘어가서 호출을 해보았다.

조건에 맞게 잘 들어가는지 확인만 해보기 위해 car1번 내용에 수정이 되는지 먼저 확인을 해주었다.

수정이 된 걸 확인을 했으면 이제 car2 번에 조건에 맞지 않는 다른 번호를 넣어서 출력을 해보았다.

1번을 넣어서 출력을 했을 땐 조건에 있는 ' 오렌지 ' 라는 색상으로 변경되어 출력이 잘 되었지만,

car2에 조건에 맞지않는 6번을 넣어서 어떻게 출력이 되었는지 보았더니  ' 지원하지 않는 색상입니다. ' 라는 문구가 나온걸 확인할 수 있다.

 

다음으론 생성자를 배웠다.

생성자란? 객체가 생성될 때 호출되는 메소드(new) 이다!

이름은 클래스명이랑 동일하다.

 

생성자를 쓰는 이유는 private 같은 클래스 내에서만 사용하기 위해, 다른 클래스에서 접근이 불가능하여 우회해서 생성자를 통해 값을 넣게 된다.

생성자의 접근지정자는 작성하지 않으면 public 으로 되면서 우회가 가능하다.

정보를 은닉하기 위해 캡슐화를 시키고 직접적으로 변수에 접근이 되지 않으니 생성자를 통해서 우회하는 것이다.

 

Car 와 CarMain 클래스 두개를 만들어서 코드를 작성하였다.

내용은 어제 배운 내용과 비슷했다.

작성한 코드를 먼저 보면 자료형에 변수를 준 후 Car 라는 생성자를 작성해주었다.

괄호안에 들어있는 변수명을 위에 선언해주었던 변수명을 같게 해주기 위해서 this 를 작성해서 맞춰준다.

showInfo 함수를 만들어서 회사명과 모델명, 색상 각각 맞게 변수를 넣어준다.

CarMain 클래스로 넘어가서 객체 생성을 해준 뒤 괄호안에 내용들을 넣어준 후 호출하여 출력을 해보았다.

원하는 값을 출력한 걸 확인했으니 다음 Constructor와 Main 클래스를 만들었다.

자료형, 변수를 선언하여 기본생성자를 먼저 호출해주었다.

* 기본생성자를 생성해주고 다음 다른 생성자를 생성해주면 기본생성자는 자동으로 비활성화 된다.

기본생성자가 꼭 필요한 경우 작성을 무조건 해주어야 하며, 다른 생성자를 작성하지 않으면 기본생성자를 생략이 가능하다.

매개변수 각각 자료형을 다르게 하나씩 호출을 해주고,

전부 호출을 해주는것도 작성해주었다.

하나씩 호출도 하고 작성한 자료형과 변수를 모두 호출하기도 하는데 이걸 우리는 생성자를 오버로딩 한다고 부른다.

한 클래스 내에 사용하려는 이름과 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메소드를 정의할 수 있다.

 

여기서 추가로 알아두면 좋은 것! (이미지에 작성되어 있음)

- 기본생성자 : NoArgsConstructor

- 매개변수를 하나만 선언해주었을 때 : RequiredArgsConstructor

- 매개변수를 전부 선언했을 때 : AllArgsConstructor

* Args -> Arguments(인수, 매개변수)

showInfo 함수 작성하여 호출을 해주고 나서, Main 클래스로 이동하여 호출 후 출력하는 코드 작성을 해주었다.

각각 매개변수 하나씩 자료형에 맞게 작성을 해준 후, 함수를 호출하여 출력을 해보았다.

출력결과

출력결과를 확인해 보면 매개변수에 들어가지 않은 값들은 null 또는 0으로 출력이 된 걸 확인할 수 있다.

작성한 코드를 확인해보면 매개변수 하나씩 작성하고, 두개 다 작성한 게 나와있는데 여기서는 하나하나 입력해서 작성해주지 않고 단축키를 사용해서 작성을 하였다.

그리고 this를 사용해서 변수를 가르키고 있다.

Alt + Shift + s 를 눌러보면 옵션창이 뜨는데 Generate Constructor using Fields 라는 창을 들어가면

이런 창이 뜨는데 여기서 매개변수를 가져와서 코드를 작성해 줄 수 있는 것이다.

모두 체크해 준 후 Generate 버튼을 누르면 위에 적혀있는 코드가 자동으로 작성이 되는 것이다.

객체를 생성하여 호출하는 코드를 작성해 보았다. (출력x)

 

다음으론 접근지정자로 넘어간다!

접근지정자란?

클래스 멤버 각각, 외부에서 접근할 수 있는 범위를 지정하는 것이다.

접근지정자의 종류를 알아보자면 표로 한번 작성을 해보았다.

접근지정자 접근 범위 동일클래스 동일패키지 다른 패키지의
자식 클래스
다른 패키지
public 접근 제한 없음
protected 동일 패키지와 상속받은 클래스 내부  
default 동일 패키지 내에서만    
private 동일 클래스 내에서만      

접근지정자 종류와 접근범위를 확인해 본 후 코드를 작성했다.

TestA, TestA_2 클래스 두개를 만들어 준 다음 코드를 작성했다.

내용을 확인해 보면, testA 에 접근지정자가 작성되지 않고 바로 void 를 작성해주었다.

여기서 확인할 것!

* 접근지정자가 작성되지 않으면 자동으로 default 값으로 인식한다!!

 

그리고 TestA_2 클래스에 코드를 작성하는걸로 넘어가서,

객체 생성을 해주었는데 객체 생성은 무조건 메인해서 할 필요 없이 메소드에서도 생성이 가능하다.

아래 나머지 호출하는 코드를 작성해 준 다음 출력하는 코드도 바로 작성해 주었다.

Main 클래스를 만들어준 다음 호출하여 출력하는 코드를 작성해 주었다.

출력 결과

출력한 결과이다.

출력한 것 중에 제일 밑에 null 이라는 값이 출력이 되었는데, 그건 TestB 클래스를 만들어주고 객체 생성하여 코드를 작성해 주었지만 따로 값은 넣어준게 없기 때문이다.

 

Student 의 클래스를 만들어서 생성자를 통해 접근지정자, 변수에 값을 주입해주는 방법을 사용해 보았다.

접근지정자 private 을 사용해 준 다음 자료형과 변수를 작성해 주었고, 기본생성자를 넣어주었다.

생성자를 쓰는 이유는 우회해서 사용하기 위함이다.

여기서 기본생성자를 다 적어주지 않고 바로 생성해 주는 방법이 있다.

Ctrl + SpaceBar 를 눌러서 작성해 주는 것이다!!

private 접근지정자에 변수 값을 주입하는 방법으로 생성자를 통해 값 주입 하는 방법을 확인해 보았다.

public 접근지정자를 사용해 준 다음 생성자를 만들어 주었는데 위에서 확인한 내용과 같이 생성자이름은 클래스 이름과 동일하게 작성한다.

옆에 자료형과 변수를 괄호안에 넣어준 다음 this 로 변수를 맞춰주었다.

 

또 다른 방법으로는 setter, getter 를 사용해서 넣어주는 방법을 사용했다.

Setter : 값을 넣는 것!

Getter : 값을 가져오는 것!

뜻은 이렇게 기억해주면 된다!

작성한 내용을 보면 변수 하나하나 전부 get,set 으로 넣어서 작성해 주었다.

물론 이렇게 하나하나 다 작성해 주어도 상관은 없지만 입력하기 번거롭기 때문에 한번에 가져올 수 있는 방법을 사용할 수 있다.

위에 만들었던 생성자를 만드는 것 처럼 Alt + Shift + s 를 눌러보면 옵션창이 뜨는데,

이번에는 Generate Getters and Setters 를 눌러준다.

이런 창이 뜨는데 만들어 줄 변수명을 체크해서 만들어주면 된다!

위에 이미지처럼 바로 입력되는 걸 확인할 수 있다!

 

배열을 배웠다!

배열을 쓰는 이유는 수 많은 값을 저장하기 위해 사용한다.

배열의 종류는 정수배열, 문자열 배열, 객체 배열로 나뉘어 져있다.

 

정수배열을 보면 int 옆에 [ ] 대괄호로 숫자를 넣어놓았다.

저 숫자는 방의 갯수라고 생각을 하면 되고, 총 5개의 방에 정수를 집어 넣어줄 수 있다.

 

문자열 배열을 보면 대괄호 안에 숫자 넣은 것은 정수 배열에서 설명한 내용이 동일하고,

여기서 확인해야 될 것은 변수 옆에 대괄호로 숫자를 넣어놓았다.

strArray[4] 안에 들어있는 4 의 숫자는 4번째 방을 말한다.

5개 방 중 4번째 방에 "홍길동" 이라는 문자열을 넣는다.

추가로 확인해야 될 것은!! 배열의 순서는 1부터 시작을 하는 것이 아닌 0부터 시작하는 것으로

예를 들어서 1부터 5까지 넣는다고 하면 0번째 방에 1이 들어가고, 1번째 방에 2가 들어가고 .....

이런식으로 쭉 들어가게 되는 것이다!

 

객체 배열은 말 그대로 객체를 저장하는 배열이다.

작성한 코드를 보면 객체를 써주면 알아서 저장을 해준다.

지금 방을 5개 만들면 5개의 객체를 저장해 줄 수 있는 것이다!

 

배열을 가지고 코드를 한번 만들어 봤다.

먼저 정수배열로 하나하나씩  전부 값을 넣어주는 것을 해보았고,

중괄호를 사용해서 한번에 값을 넣어 보기도 했다.

중괄호로 한번에 값을 넣을 땐 new int[ ] 없이 바로 사용 하는 것도 가능했다.

3번째 배열을 출력을 해보기도 했다.

출력 결과를 보면 3번째 배열에 있는 4 를 가지고 오는 걸 확인할 수 있다.

배열을 반복문과 함께 사용해 보았다.

1부터 1000까지 반복문을 사용해서 코드를 작성해 주었고, 출력해보았다.

출력결과는 1부터 1000까지 출력이 잘 된 것을 확인할 수 있었다.

이렇게 셋째 주 수업을 마무리했다.

함수, 클래스 부분으로 들어가니까 확실이 전에 했던 내용보다 어렵게 느껴졌다.

좀 더 열심히 집중있게 수업을 잘 들어야겠다 ㅠ