<Java> Enhanced for loop, 변수와 메서드

·2023년 6월 7일
0

Java

목록 보기
5/7

Enhanced for loop

컬렉션을 대상으로 반복할 때는 해당 for문이 효과적이다.

실제 배열, 객체 값을 저장하는 것이 아닌 얇은 복사로 값만 가져온다.
원래 배열값을 변경하지 않는다.

따라서, 배열에 저장된 값을 읽기로만 사용할 때, Enhanced for loop를 사용한다.

변경된 값을 사용한다면 기존 for loop를 사용한다.

기본 for문과의 차이

기존 for문은 실제 배열값을 직접 변경한다.

Enhanced for문은 실제 배열값을 직접 변경하지 않고, 값만 가져와서 해당 scope 블록 안에서만 변경된 값을 사용가능 하다.

// 초기식 조건식 증감식이 없는 for 반복문. (향상된 for문, java - advanced for statement)
        // 콜론 ( : ) 뒤에는 배열이나 자료구조 클래스(컬렉션) 객체가 올 수 있음.
        // 참조형 자료구조만 올 수 있음.
        // 배열의 크기만큼 == length만큼 반복한다.
        // 배열의 인덱스 크기대로 반복변수에 저장된다. => 해당 인덱스의 참조값을 저장한다.
        
		int[] lotto = new int[6];

        lotto[0] = 7;
        lotto[1] = 12;
        lotto[2] = 48;
        lotto[3] = 2;
        lotto[4] = 33;
        lotto[5] = 25;
        
        for(int num : lotto) {
            System.out.println(num + "");
        }



        String[] fruits = {"사과", "딸기", "바나나", "복숭아", "포도"};
        // 향상된 for문을 사용하여 모든 과일을 출력하는 코드를 작성하기.

        for(String fruit : fruits) {
            System.out.println(fruit + "");
        }

변수

선언 위치에 따른 변수의 종류

변수의 선언위치가 변수의 종류와 범위Scope를 결정한다.

인스턴스 변수 (=== 멤버 변수 또는 필드)

new라는 키워드로 만들어진 인스턴스들이 사용할 수 있는 변수.

클래스 변수와 선언되는 위치가 같음. (메서드 밖)
하나의 클래스로 부터 만들어진 각각의 인스턴스 마다 존재한다.

<목적>

  • 각각의 인스턴스마다 가져야하는 데이터 할당

클래스 변수 (=== 정적 변수)

하나의 클래스로 부터 무조건 하나만 존재하는 변수.
같은 클래스의 모든 인스턴스들이 공유하는 변수. 공유 데이터

사용시 ) 클래스 이름. 클래스 변수 || 클래스 이름으로 접근하고 사용한다.

인스턴스에 존재하지 않음. 클래스 자체에 존재한다.

클래스가 최초로 메모리에 올라온 시점부터 사용가능하다.

<인스턴스 변수와 차이점>
1. 클래스 변수는 사용할 때 static이라는 제한자가 붙는다.
클래스로 부터 만들어진 각각의 인스턴스마다 존재한다.
2. 인스턴스를 만들지 않고도 사용가능하다.

클래스가 로딩될 때 생성되고 프로그램이 종료될 때 소멸된다.

222
<목적>

  • 하나의 클래스로 부터 만들어진 각각의 독립적인 인스턴스가 유일하게 서로 공유해야하는 공통의 데이터

static이 붙은 변수는 클래스 변수를 뜻한다.

지역 변수

메서드 안에서 선언된 변수
메서드 안에서만 사용가능한 변수다.

해당 메서드 밖에서 사용하지 못한다.

메서드

객체가 제공하는 기능

메서드를 사용하기 위해서는 클래스로 부터 인스턴스를 만들고, 그 인스턴스를 참조하는 레퍼런스를 이용한다.
레퍼런스 이름. 메서드 이름

// 예시코드
String nameTag () {
	// nameTag의 메서드 코드..
}

// Return Type Method Name(Parameter) {
//	호출되면 실행될 코드
// 	return;
// }

입력값과 반환값의 유무에 따라 4가지 형태의 메서드가 있다.
1. 반환, 입력값 없는 메소드 - type => void
2. 입력값은 있지만, 반환값 없는 메소드 - type => void
3. 입력값은 없지만, 반환값이 있는 메소드
4. 입력값과 반환값이 있는 메소드

메서드 이름은 식별자로 구분된다.

  1. 작업을 수행하기 위한 명령문의 집합
  2. 어떤 값을 입력받아서 처리하고 그 결과를 반환한다.
    • (입력받는 값이 없을 수 있으며, 결과를 반환하지 않을 수도 있다.)

메서드의 장점

  1. 반복적인 코드를 줄이고, 코드의 관리가 용이하다.
  2. 반복적으로 수행되는 여러 문장을 메서드로 작성한다.

메서드 작성 지침

  1. 하나의 메서드는 한 가지 기능만 수행하도록 작성하도록 한다.
  2. 관련된 여러 문장을 메서드로 작성한다.
  3. return을 사용하여 메서드의 실행결과를 반환한다. 그리고 메서드는 종료된다.

return문

return이후 문장은 실행되지 않는다.
현재 실행중인 메서드를 종료하고 호출한 메서드로 되돌아간다.

return되는 값은 타입이 일치해야한다.

명시적으로 return이 실행된 위치에서 코드는 멈춘다.
따라서 return 아래 코드가 있으면, 에러가 초래된다.

 void return1() {
        System.out.println("Return1 1번 문장");
        System.out.println("Return1 2번 문장");

        return; // 명시적으로 return이 실행된 위치에서 코드는 멈춘다.
        // 따라서 return 아래 코드가 있으면, 에러가 초래된다.

//        System.out.println("세 번째 문장");
    }

return값을 사용하려면 변수 하나를 선언하고, 값을 할당한다.

// class file
String return2() {
	System.out.println("Return2() 호출 성공");

	return "호출결과"; // return 값을 사용하려면 변수 하나를 선언하고, 그 변수에 return 값을 담는다.
    }
    
// instance file

    Ex5Test state = new Ex5Test();

	//방법 1
    String returnValue = state.return2();
    System.out.println("returnValue : " + returnValue);
    
    // 방법 2
    System.out.println("returnValue : " + state.return2());

메서드가 정상적으로 종료되는 경우

  1. 메서드의 블럭{} 끝에 도달했을 때
  2. 메서드의 블럭{}을 수행 도중에 return문을 만났을 때

클래스 메서드 (Static Method)

클래스 변수에 대한 연산, 가공, 처리에 대한 역할.

  • 객체 생성없이 클래스이름.메서드이름()으로 호출
  • 인스턴스 변수나 인스턴스 메서드와 관련없는 작업을 하는 메서드
  • 메서드 내에서 인스턴스 변수 사용불가

클래스 메서드의 제약

클래스 메서드 안에서(in)인스턴스 변수를 사용할 수 없다.
오직 클래스 변수값을 클래스 변수에 대한 연산, 가공, 처리에 대한 역할.

인스턴스 메서드 (Instance Method)

  • 인스턴스 생성 후, 참조변수.메서드이름()으로 호출
  • 인스턴스 변수나 인스턴스 메서드와 관련된 작업을 하는 메서드
  • 메서드 내에서 인스턴스 변수 사용가능.
  • 클래스 메서드 사용 가능. (제약조건 없이 모두 접근하여 사용가능함)
profile
- 배움에는 끝이 없다.

0개의 댓글