반응형
Exam0240 - 메서드 : 개념 및 기본 문법 IV
package bitcamp.ex07;
//# 메서드 : 개념 및 기본 문법 IV
//
public class Exam0240 {
// 4) 메서드 : 리턴값(O), 파라미터(O)
// => "이 돈 갖고 과자좀 사와!"
static String hello(String name, int age) {
String retVal = String.format("%d살 %s님을 환영합니다!", age, name);
return retVal;
}
public static void main(String[] args) {
// hello() 메서드를 실행하고, 그 리턴 값을 변수에 담는다.
String r = hello("홍길동", 20);
System.out.println(r);
// 앞의 예제와 마찬가지로 리턴 값을 한 번만 사용한다면,
// 사용할 곳에 메서드 호출 코드를 둬라!
// => 리팩토링 기법 중에서 "replace temp with query" 라 부른다.
System.out.println(hello("홍길동", 20));
// 리턴 값을 안 받아도 된다.
hello("임꺽정", 30); // 리턴 값은 버려진다.
}
}
Exam0410 - 메서드 : JVM 메모리
package com.eomcs.lang.ex07;
//# 메서드 : JVM 메모리
//
public class Exam0410 {
static void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
System.out.printf("swap(): a=%d, b=%d\n", a, b);
}
public static void main(String[] args) {
int a = 100;
int b = 200;
swap(a, b);
System.out.printf("main(): a=%d, b=%d\n", a, b);
}
}
// 실행 순서와 메모리
// 1) java -classpath bin com.eomcs.lang.ex07.Exam0410
// => JVM은 클래스 정보를 Method Area 영역에 로드한다.
// 2) main() 호출
// => JVM Stack 영역에 main() 메서드가 사용할 로컬 변수를 준비한다.
// 3) swap() 호출
// => JVM Stack 영역에 swap() 메서드가 사용할 로컬 변수를 준비한다.
// 4) swap() 실행 완료
// => JVM Stack 영역에 있던 swap()이 사용한 메모리를 제거한다.
// 5) main() 실행 완료
// => JVM Stack 영역에 있던 main()이 사용한 메모리를 제거한다.
// 6) JVM 실행 종료
// => OS가 JVM에게 사용하라고 빌려줬던 모든 메모리를 회수한다.
// JVM이 메모리를 다루는 방법
// - 크게 다음 세가지 영역으로 나눠 관리한다.
//
// 1) Method Area
// - 클래스 명령 코드를 둔다.
// - static 변수를 둔다.
//
// 2) Heap
// - new 명령으로 만든 메모리(인스턴스=객체)를 둔다.
// - Garbage Collector(GC)가 관리하는 영역이다.
//
// 3) JVM Stack
// - 스레드 별로 JVM Stack 메모리를 따로 관리한다.
// - 메서드의 로컬 변수는 둔다.
// - 각 메서드마다 프레임 단위로 관리한다.
// - 메서드 호출이 끝나면 그 메서드가 사용한 프레임 메모리가 제거된다.
// - 이렇게 메서드가 호출될 때 로컬 변수가 준비되고
// 맨마지막에 호출한 메서드가 먼저 삭제된다고 해서
// "스택(stack)" 메모리라 부른다.
// 스택? 접시 쌓는 것을 생각하라!
// - 스택 방식을 "Last In First Out(LIFO;후입선출, FILO;선입후출)"라 부른다.
//
// JVM이 종료하면 JVM이 사용했던 모든 메모리를 OS가 회수한다.
Exam0540 - 메서드 : main()메서드
package bitcamp.ex07;
// # 메서드 : main() 메서드 - 프로그램 아규먼트 응용 II
//
public class Exam0540 {
public static void main(String[] args) {
// 학생의 이름과 국영수 점수를 입력 받아 총점과 평균을 출력하라
// $ java -cp ./bin/main com.eomcs.lang.ex07.Exam0540 홍길동 100 100 90
// 이름: 홍길동
// 총점: 290
// 평균: 96.9
//
if (args.length < 4) {
System.out.println(
"실행 형식: java -cp ./bin/main com.eomcs.lang.ex07.Exam0540 이름 국어점수 영어점수 수학점수");
return;
}
int sum = 0;
for (int i = 1; i < args.length; i++)
sum += Integer.parseInt(args[i]);
System.out.printf("이름: %s\n", args[0]);
System.out.printf("총점: %d\n", sum);
System.out.printf("평균: %.1f\n", sum / 3f);
}
}
Exam0620 - 메서드 : JVM 아규먼트 응용
package com.eomcs.lang.ex07;
// # JVM 아규먼트 응용 I
//
public class Exam0620 {
public static void main(String[] 변수명은상관없다) {
// JVM 아규먼트로 학생의 이름과 국영수 점수를 입력 받아 총점과 평균을 출력하라
// $ java -cp ./bin/main -Dname=홍길동 -Dkor=100 -Deng=100 -Dmath=90 com.eomcs.basic.ex07.Exam0620
// 이름: 홍길동
// 총점: 290
// 평균: 96.9
//
String name = System.getProperty("name");
String s1 = System.getProperty("kor");
String s2 = System.getProperty("eng");
String s3 = System.getProperty("math");
if (name == null || s1 == null || s2 == null || s3 == null) {
System.out.println(
"실행 형식: java -cp ./bin/main -Dname=이름 -Dkor=국어점수 -Deng=영어점수 -Dmath=수학점수 com.eomcs.basic.ex07.Exam0620");
return;
}
int kor = Integer.parseInt(s1);
int eng = Integer.parseInt(s2);
int math = Integer.parseInt(s3);
int sum = kor + eng + math;
System.out.printf("이름: %s\n", name);
System.out.printf("총점: %d\n", sum);
System.out.printf("평균: %.1f\n", sum / 3f);
}
}
반응형