Data Scientist 옌

매일 발전하는 IT문제해결사

국비지원교육 (22.01-22.07)/강의노트

22-02-03(목) 006일차 [Java] 메소드(함수)의 자료형, 매개변수와 인수, 변수의 유효범위

옌炎 2022. 4. 10. 14:51
728x90

수업내용


1교시 (09:30-10:20)

  • 모르면 질문하기
  • 지금까지의 수업 복습
    1. java jdk : java development kit (jdk + jre) jdk : 개발 엔진 : 컴파일러 : javac.exe : 자바 소스를 자바 버추얼 머신이 알 수 있게 만든 것 : 바이트 코드 byte code, 클래스 코드 class code ============================================ 자바소스 코드에 작성된 키워드, 문자, 기호, 연산자, 빌트인 자원 및 식별자를 자바 규칙에 맞게 사용했는지 검사하는 것 ============================================ java.exe : 자바 버추얼 머신이 바이트코드(클래스코드)를 CPU와 서로 통신해서 결과를 만든 것 jre : 실행엔진 : JVM : java.exe패키지 컴파일 javac -d . 자바파일이름.확장자 패키지 클래스 실행 java 패키지명.클래스이름만
    2. 환경변수 세팅을 하는 이유 javac.exe 컴파일 명령어를 컴퓨터 내 어디에서든지 실행시키려고
    3. 편집기 에디트플러스
    4. 명령어 처리할 도구 cmd, 콘솔, MS-DOS
    5. API rt.kar에 있는 자원들(빌트인 클래스 etc.) html 문서로 보여주는 것 api는 버전을 꼭 확인해야 한다. javac -version java -version
    자바 소스 구성하는 키워드 package : 클래스 파일을 모아두는 폴더, 디렉토리 import : rt.jar에 있는 자원, 사용자 정의로 만든 클래스 파일을 불러올 때 public : 접근 제한자 : 폴더를 넘나 들면서 : protected default private static : 메모리에 올리라고 요청하는 키워드 class : 자바 소스를 만드는 가장 최소 단위==================================================
  • 변수를 사용하는 방법
  • 데이터형 선언 변수명 선언 ;
  • 자료형 선언 변수명 선언 = 변수의 값 ;
  • 데이터형 선언 변수명 선언 = 변수의 값;
    ==================================================
  • 자료형 선언 변수명 선언 ;
  • 자료형 : 데이터를 담는 통 : 메모리를 절약하기 위해서 기초 자료형 : primitive type byte Byte MAX_VALUE, MIN_VALUE short Short int Integer long Long
  • java 공부 : 자바를 하기 위한 개발 도구

2교시 (10:30-11:20)

  • 함수 (메소드)
  • [교재 134~136p] 함수, 매개변수, 반환값
package a.b.c.ch1;

// class 키워드를 이용해서 이름이 Exam_Method 사용자 정의 클래스를 선언한다.
// 사용자 정의 클래스 Exam_Method 에 있는 구성원은 class = 변수 + 함수 
// aMethod() 함수 1개
// main() 함수 1개 
// Exam_Mehtod = aMethod() 함수, main() 함수 
public class Exam_Method {

	// 일반 언어에서 함수라 Function 하는 것을 객체지향 언어에서는 메소드 method 라고 한다. 
	// 함수의 일반적인 정의 : 하나의 기능을 수행하는 일련의 코드
	// 함수의 정의 : 기능을 모아 두는 곳
	// 함수는 데이터를 담아 두는 상자이다.

	// 함수를 선언하는 방법
	/*
	1.	클래스 블럭 안에서 선언한다.
	2.	함수 이름 앞에는
			접근 제한자 키워드를 사용할 수 있다. : public, protected, default, private 
			수정자 키워드를 사용할 수 있다. : static, final 
			리턴형을 선언할 수 있다. : void, 기초 자료형, 참조 자료형, 사용자 정의 클래스 데이터
	3.	함수 이름은 영문자 소문자로 시작한다.(한글도 가능하나 사용하지 않는다.)
	4.	함수 이름 뒤에는 () 소괄호를 선언한다.
		소괄호 안에는 parameter(매개변수)를 순차적으로 선언할 수 있다.
	5.	소괄호 뒤에는 {} 중괄호 블럭을 선언한다.
	6.	함수에서 return 키워드를 사용하는 이유
			함수에서 선언한 변수는 직접 함수 밖으로 나갈 수가 없다.
	7.	함수 블럭 {} 안에서는 인터프리터 interpriter 방식 
		(한줄씩 읽어가면서 실행하는 형식)으로 실행 된다.
	*/
	public static void aMethod(int i) {
		int ii = i; 
		System.out.println("aMethod() 함수 블럭 안에서 출력 >>> : " + ii);
	}


	// 메인 함수를 선언한다.
	public static void main(String args[]){
	
		// 사용자 정의 클래스 Exam_Method 클래스 main() 함수에서 
		// 사용자 정의 클래스 Exam_Method 에 있는 aMethod() 함수를 호출한다 invoke 한다..
		Exam_Method.aMethod(100);
		
	} // end of main() 
} // end of Exam_Method class

3교시 (11:30-12:20)

  • 위 함수 코드에 대한 설명 및 주석 달기

4교시 (12:30-13:20)

  • 메소드와 인터프리터 방식
package a.b.c.ch1;

// 사용자 정의 클래스 Exam_Method_1 클래스에는 자원이 무엇이 있을까요?
// class의 자원 = class = 변수 + 함수
// 함수 4개 : main() 함수 + 사용자 정의 함수 3개
// 컴파일 하고 : javac -d . Exam_Method_1.java
// 실행하기 : java a.b.c.ch1.Exam_Method_1

// 자바는 인터프리터 방식으로 수행된다. 함수 블록 안에서만 인터프리터 방식으로 수행된다.
// 자바 콘솔 어플리케이션은 main() 함수부터 시작한다.
// main() 함수 블록을 한 줄 씩 읽어가면서 수행된다.

// Exam_Method_1 자바 소스를 컴파일한다.
// Exam_Method_1 클래스 파일을 실행한다.

/*
	1. Exam_MEthod_1 클래스 안에 있는 main() 함수를 호출한다.
	2. main()의 블록의 첫 번째 라인을 읽어서 수행한다.
*/

/*
=======================================
자바 콘솔 어플리케이션 시작은 main() 함수이다.
main()함수 블록에서 한 줄씩 읽어가면서
함수를 호출하며 수행된다.
=======================================
*/

public class Exam_Method_1 {

	public static void aM() {
		System.out.println("aM() method 함수");
		System.out.println("aM() method 함수 블럭 두 번째 라인에서 bM() 함수 호출을 한다.");
		bM();
	}

	public static void bM() {
		System.out.println("bM() method 함수");
	}

	public static void cM() {
		System.out.println("cM() method 함수");
	}

	// 메인 함수를 선언한다.
	public static void main(String args[]){
		System.out.println("첫 번째 라인에서 Exam_Method_1 클래스 블록에 있는 main() 함수 시작 >>> : ");
		System.out.println("두 번째 라인에서 Exam_Method_1 클래스 블록에 있는 aM() 함수를 호출한다. >>> : ");
		System.out.println("aM() 함수 블록의 첫 번째 라인이 수행된다. >>> : ");
		Exam_Method_1.aM();

		System.out.println("세 번째 라인에서 Exam_Method_1 클래스 블록에 있는 cM() 함수를 호출한다. >>> : ");
		System.out.println("cM() 함수 블록의 첫 번째 라인이 수행된다. >>> : ");
		Exam_Method_1.cM();

		System.out.println("세 번째 라인에서 Exam_Method_1 클래스 블록에 있는 bM() 함수를 호출한다. >>> : ");
		System.out.println("bM() 함수 블록의 첫 번째 라인이 수행된다. >>> : ");
		Exam_Method_1.bM();
	
	} // end of main()

} // end of Exam_Method_1 class

 


5교시 (14:30-15:20)

  • 메소드와 자료형
package a.b.c.ch1;

public class Exam_Method_2 {

	// int 형 데이터 타입, 자료형, 프라이머티브 타입 : 리턴형
	// 리턴형 : 함수에서 출력하는(밖으로 내보내는) 데이터 타입을 말한다.
	// Return 키워드 뒤에 쓰는 데이터 타입(형)이 이 함수에서는 int형 이어야 한다.
	// static int : int 자료형 하고 return a + b의 결과 값의 자료형이 int형으로 동일해야 한다.
	// 함수의 리턴형과 return 키워드 뒤에 선언되는 데이터형은 항시 동일해야 한다. 아니면 에러가 발생한다.

	static int addMethod() {
		// addMethod() 함수 블록에 있지만 리턴 대상이 아니다.
		// 콘솔에 출력하라는 명령문이다.
		System.out.println("Exam_Method_2 클래스에 있는 addMethod() 메소드(함수)");
		
		int a = 1;
		int b = 2;

		// addMethod() 함수의 리턴값은 a+b의 결과값이다.
		// 리턴값 a + b의 데이터형과 addMthod() 선언부에 있는 int 리턴형은 데이터 타입이 항시 동일해야 한다.
		return a + b;
	}

	// default 키워드 접근 제한자 access modifier
	// a.b.c.ch1 패키지(폴더) 내에서만 호출할 수 있다.
	static void aM() {
		System.out.println("Exam_Method_2 클래스에 있는 aM() 메소드(함수)");
	}

	// public 키워드 접근 제한자 access modifier
	// a.b.c.ch1 패키지(폴더)가 아닌 폴더에서도 호출할 수 있다.
	public static void bM(){
		System.out.println("bM() method 함수");
	}

	// 메인 함수를 선언한다.
	public static void main(String args[]) {
		System.out.println("Exam_Method_2 클래스에 있는 main() 메소드(함수) \n");

		System.out.println("리턴형이 있는 함수는 리턴 값을 받는 변수를 선언해서 사용한다.");
		System.out.println("Exam_Method_2.addMethod() 함수 호출 결과 >>> : " + Exam_Method_2.addMethod());
		int sum = Exam_Method_2.addMethod();
		// int sum = 3 (return [a + b = 3]);
		System.out.println("int sum = " + sum + "\n");

		System.out.println("리턴형이 void인 함수는(리턴 값이 없는 함수, return 키워드가 없는 함수)는");
		System.out.println("리턴값을 받는 변수를 사용하지 않는다. 그냥 함수만 호출해서 사용한다.");
		Exam_Method_2.aM();

	} // end of main()

} // end of Exam_Method_2 class

6교시 (15:30-16:20)

  • 함수의 parameter와 argument
package a.b.c.ch1;

/*
	함수에서
	파라미터 parameter 매개변수 선언하기
	함수 호출할 때 인수 argument를 사용하는 방법
*/
public class Exam_Method_3 {

	// 더하기 함수 만들기
	/*
		함수를 선언할 때(함수를 만들 때)
		함수 이름 뒤에 소괄호를 선언해서
		소괄호에 데이터 타입을 선언하고 변수 명을 선언하는 것을
		우리는 parameter 매개변수라고 부른다.
		매개변수 : 연결해주는 변수
	*/
	static int addMethod(int x, int y) {
		System.out.println("Exam_Method_3 클래스에 있는 addMethod() 메소드(함수)");

		int addSum = x + y;

		return addSum;
	}
	
	// 메인 함수를 선언한다.
	public static void main(String args[]) {
		System.out.println("Exam_Method_3 클래스에 있는 main() 메소드(함수) \\n");

		// 변수를 선언해서 초기화
		int x = 1;
		int y = 2;

		// 함수를 호출할 때
		/*
			함수를 호출할 때
			함수 이름 뒤 소괄호에 선언하는 값 또는 변수를
			우리는 argument  인수라고 부른다.
		*/
		int addSum  = Exam_Method_3.addMethod(x, y);
		// static int addMethod(int x, int y) ==> static int addMethod(x = 1, y = 2)
		/*
		===============================================================
			인수의 변수명 addMethod(x, y) 와
			매개변수의 변수명 addMethod(int x, int y)는 동일하지 않아도 된다.
			여기서 x, y의 int x, int y의 변수명은 같지 않아도 된다.
		===============================================================
		*/
		System.out.println("addSum >> : " + addSum + "\\n");
		System.out.println("Exam_Method_3.addMethod(x, y) >>> : "
								+ Exam_Method_3.addMethod(x, y) + "\\n");

		int addSum_1 = Exam_Method_3.addMethod(1, 3);
		System.out.println("addSum_1 >>> : " + addSum_1 + "\\n");
		
		System.out.println("Exam_Method_3.addMethod(1, 2) >>> : "
								+ Exam_Method_3.addMethod(1, 2) + "\\n");

	} // end of main()

} // end of Exam_Method_3 class

7교시 (16:30-17:20)

  • [교재 137~140p] 함수 호출과 반환
  • 변수의 유효범위
package a.b.c.ch1;

// 함수 안에서 사용하는 변수의 유효 범위
// 함수서 선언하는 많은 변수는
// {} 중괄호 블록에서 선언하고 {} 중괄호 블록에서 사용해야 한다.
public class Exam_Var_2 {

	// 메인 함수 콘솔 어플리케이션의 시작점이다.
	public static void main(String args[]) {
		System.out.println("Exam_Var_2.main() 함수 시작");
		System.out.println("인터프리터 방식으로 수행된다.");
		System.out.println("main() 함수 블록 왼쪽부터 오른쪽 80 컬럼");

		// 선언 전이라 실행되지 않음	
		// System.out.println(">>> : " + i);

		// 변수를 선언하고 초기화했다.
		// 선언한 변수명 i의 유효 범위는(사용할 수 있는 범위)
		// i 선언한 하위 라인부터 main 함수 블럭이 끝나는 라인까지 유효하다.
		int i = 10;

		System.out.println(">>> : " + i);

		//블록 선언
		{
			int ii = 1000;
			System.out.println(">>> : " + ii);
			System.out.println("{} 안에서 >>> : " + i);
			i = 101;
		}
		/*
		System.out.println(">>> : " + ii);
		C:\\00.KOSMO108\\10.JExam\\ch1>javac -d . Exam_Var_2.java
		Exam_Var_2.java:23: error: cannot find symbol
						System.out.println(">>> : " + ii);
													  ^
		  symbol:   variable ii
		  location: class Exam_Var_2
		1 error
		*/
		
	} // end of main()

} // end of Exam_Var_2 class

8교시 (17:30-18:30)

  • 변수 유효 범위 (지역변수, 멤버변수 스태틱변수)
package a.b.c.ch1;

// 자바 변수 : 상수, 클래스변수, 전역변수, 멤버변수, 지역변수
// 변수의 유효 범위
public class Exam_Var_3 {
	// 자바의 정식 용어 : 자바 클래스 내부에 선언하는 변수는 Field 필드라고 부른다.

	// 멤버변수 : 클래스 블록 내부와 함수 블록 외부에 선언하는 변수이다.
	// 멤버 변수의 종류에는
	/*
		상수
		클래스변수
		전역변수
		멤버변수
	*/
	// static 붙어서 클래스 변수, 스태틱 변수
	static int i;
	// 상수
	public static final int CONSTRUCTURE_VARIABLE = 10;
	// 클래스 변수, 스태틱 변수
	// 쓰지 말기. 잘못 쓰면 큰일 남
	static int i_var_staticVariable;
	// 전역 변수
	public int i_Var_GlobalVariable;
	// 멤버 변수
	int i_var_MemberVariable;

	// 메인 함수 콘솔 어플리케이션의 시작점이다.
	public static void main(String args[]) {

		// main() 함수 블록 안에 있다.
		// 함수 블록 안에서 선언하는 변수는 지역 변수 local variable 라고 부른다.
		int ii = 1;
		System.out.println("Exam_Var_3.i >>> : " + Exam_Var_3.i);
		// System.out.println("Exam_var_3.ii >>> : " + Exam_Var_3.ii);
		System.out.println("ii >>> : " + ii);

	} // end of main()

} // end of Exam_Var_3 class

Notes


 

728x90