본문 바로가기
수업 일지/JAVA

6일차 - [JAVA] 클래스/객체/메소드/static/final/전역변수/지역변수

by 쿠쿠씨 2022. 1. 5.
반응형

중첩 for문

 

바깥쪽 for문이 한 번 실행할 때마다 중첩 for문은 지정된 횟수만큼 반복해 돌다가 다시 바깥쪽 for문으로 돌아간다.

중첩 for문 예제

8라인~26라인 5개의 for문의 결과는 29라인 중첩 for문의 결과와 같다. 

29라인 k=1일 때 안쪽 for문의 반복이 실행되고 반복이 끝나면

           다시 k=2일 때 안쪽 for문의 반복이 실행된다. · · · k=5가 될 때까지 실행된다.

 

for문 오류

 

다음은 오류가 발생한 상황이다.

35라인~41라인이 바깥쪽 for문이고,

36, 37라인이 안쪽 for문이다.

39라인 안쪽 for문에서 선언된 변수 i를 바깥쪽 for문에서 사용하여 오류가 발생했다.

42라인 바깥쪽 for문에서 선언된 변수 k를 for문 밖에서 사용하여 오류가 발생했다.

 

클래스와 객체

 

클래스

클래스는 구조적인 데이터 타입이다.

필드와 메소드로 이루어져 있다.

 

객체

클래스의 인스턴스(메모리에 로드된 상태)이다.

클래스로부터 객체를 생성할 때  new 연산자를 사용한다.

객체를 생성해서 사용할 때 인스턴스(instance) 멤버(필드, 메소드)를 사용한다.

객체에서 사용되는 변수는 객체의 주소를 클래스타입으로 저장하여서 참조 변수라고 한다.

 

필드와 메소드에 적용되는 키워드: static final

 

static(정적)

객체로 사용되지 않고 클래스 이름으로 직접 사용한다. (ex.  클래스 이름.필드, 클래스 이름.메소드)

static 멤버(필드, 메소드)는 메모리 영역이 따로 존재하고 static은 static만 호출하고 사용할 수 있다.

 

final

final로 선언한 변수는 값을 변경할 수 없다.

선언할 때 반드시 초기값을 설정해야 한다

필드에서는 상수이다.(대부분의 상수는 static final이다.)

 

 → 빨간 네모 안의 S F는 static final 필드를 의미한다. (커서 올려 놓음)

 

static final 필드는 상수처럼 변하지 않는 값이다.

static final 필드는 굵은 기울어진 글씨체로 쓰여진다.

일반적으로 클래스의 기본형 상수 필드를 대문자로 표기한다.

 

메소드

 

메소드 형식: 반환값형식 메소드이름 (인자 선언) { 메소드 실행 블록 }

 

반환값 형식: int

메소드 이름: yearth()

인자(매개변수): int형 변수 now

메소드 실행: now-year(변수)+1 값을 int형으로 return(반환)한다.

 

반환값은 메소드를 실행한 후 반환되는 결과 값이다.

반환값 형식이 없으면 void를 사용한다.

인자(args)는 메소드 실행에 필요한 데이터이다.

인자는 개수 제한이 없다. 변수 선언과 같은 방식으로 ,로 구분한다.

선언된 인자의 순서/형식/개수를 일치하여 메소드를 호출해야 한다.

 

<단축키 Ctrl+Shift+- 를 누르면 수평으로 토글을 나눌 수 있다.>

 

main() 메소드의 특징: static(정적), static 메소드만 실행 가능합니다.

  →static은 static 성질을 갖는 요소들만 사용한다.

 

메소드 예제1

 

1. 인자(args)와 반환값이 없는(void) 메소드

 

반환값 형식: void

인자: 없음

 

2. 인자가 있고 반환값이 없는 메소드

 

반환값 형식: void

인자: a(int), name(String)

 

메소드 실행할 때 인자의 형식에 맞게 값을 지정해야한다.

그 값으로 a는 정수값, name은 문자열의 참조값을 저장한다.

testMethod2(123, 123); 는 두 번째 인자의 형식(String)이 맞지 않아서 오류가 발생했다.

 

3. 인자가 없고 반환값이 있는 메소드

 

반환값 형식: int

인자: 없음

 

반환값이 있는 메소드에는 return문이 있어야 한다.

반환값이 있는 메소드는 변수를 사용하여 저장, 출력할 수 있다.

반환값을 연산에 사용할 수 있다.

 

4. 인자가 있고 반환값이 있는 메소드

 

반환값 형식: int(testMethod4), double(testMethod44)

인자: a, b

 

testMethod4처럼 반환값을 변수에 저장하지 않고 바로 출력할 수도 있다.

 

메소드 예제2: 요일 출력하기

 

정수값을 전달 받고 1이면 "월요일, 2면  "화요일",....7이면 일요일을 반환하고,

1~7이외의 값은 "unknown"을 반환하는 메소드 만들기

 

if문을 사용하여 만들 수도 있고 switch문을 사용하여 만들 수도 있다.

반환값 형식: String

인자: a

 

전역변수지역변수

 

변수는 선언된 블록 내에서만 사용할 수 있다.

전역변수는 클래스 블록 내에서 선언된 변수로 클래스 내 어디서든 사용할 수 있다.

지역변수는 메소드 블록 또는 다른 명령문 블록내에서 선언된 변수로

 블록 내부에서만 사용되고 메소드 실행이 끝나면 메모리에서 자동으로 없어진다.

 

전역변수를 선언하면 지역변수와 달리 파란색으로 나타난다.

12라인 final변수는 초기값을 설정하지 않으면 오류가 발생한다.

17라인 main() 메소드 내의 지역변수 sum은 메소드 블록 내에서만 사용할 수 있다.

20라인 while문 내 지역변수 k는 while문 { } 블록 내에서만 사용할 수 있다.

26라인 클래스 블록에서 선언한 전역변수 gval은 main() 메소드 내에서도 사용할 수 있다.

29라인 final변수 fval2는 초기값을 변경할 수 없어 오류가 발생한다.

11라인 static final 변수 fval2는 글씨체가 바뀌고 굵어졌다.

 

static영역이 아닌 nonStatic() 메소드 안에서도 static변수인 gval을 사용할 수 있다.

static영역에서는 static멤버(필드, 메소드)만 사용할 수 있지만

instance영역(static이 아닌 영역)에서는 static멤버와 instance멤버를 둘 다 사용할 수 있다.

 

다음은 새로운 클래스이다.

7라인 클래스이름.메소드 또는 클래스이름.필드 형식일 때 메소드와 필드는 static이다.

  → fval2 : static final 변수

9라인~12라인 obj는 참조변수이다. 참조변수.메소드 또는 참조변수.필드 형식일 때

                     메소드와 필드는 instance이다.

 → dval : 인스턴스 변수

 

Outline창에서 클래스 내의 필드와 메소드를 확인할 수 있다.

 

클래스, 필드, 메소드 예제: 걸그룹

 

클래스에 필드를 저장하고 메소드를 정의한 뒤 다른 클래스에서 불러오는 예제이다.

먼저 GirlGroup클래스를 작성한다.

 

6라인 걸그룹의 성별은 변하지 않는 값이므로 static final 변수 GENDER를 선언한다.

7라인~10라인 필요한 변수(필드)를 선언한다.

13라인 인스턴스 필드값을 출력하는 infoPrint() 메소드를 정의한다.

19라인 현재 연도를 인자로 받아서 연차를 계산하는 yearth() 메소드를 정의한다.

다음으로 GirlGroupTest클래스를 작성한다.

 

10라인 클래스이름.필드(GirlGroup.GENDER)를 이용하여 static 필드를 사용한다.

13라인 객체를 생성한다. GirlGroup 객체를 참조하는 참조변수 brave를 선언한다.

14, 15라인 참조변수 brave를 이용하여 필드값을 입력한다.

22라인 참조변수 brave를 이용하여 인스턴스 메소드 infoPrint()를 호출합니다.

25라인 참조변수 brave를 이용하여 인스턴스 메소드 yearth()를 호출합니다.

 

객체의 필드값을 직접 입력받아 실행할 수도 있다.

43라인 Integer.parseInt(sc.nexLine()) 메소드는 입력 받은 문자열을 정수로 변환하는 메소드이다.

 Integer 클래스는 래퍼 클래스이다.

 

 

* 새로 배운 단축키

 •수평 토글 나누기: Ctrl + Shift + - 

 •찾기/바꾸기: Ctrl + F

 

* 새로 배운 메소드

Integer.parseInt(문자열) : 문자열을 정수로 변환(반환)

반응형

댓글