주제 : 김영한님의 자바 입문 강의 총 정리
내용 : 이를 통해, 자바의 기본적인 코드를 작성할 수 있다!
변수는 선언한 위치에 따라 지역 변수, 멤버 변수와 같이 분류된다.
지역 변수는 이름 그대로 특정 지역에서만 사용할 수 있는 변수라는 뜻이다.
public class Scope1 {
public static void main(String[] args) {
int m = 10; //m 생존 시작
if (true) {
int x = 20; //x 생존 시작
System.out.println("if m = " + m); //블록 내부에서 블록 외부는 접근 가능
System.out.println("if x = " + x);
} //x 생존 종료
//System.out.println("main x = " + x); //오류, 변수 x에 접근 불가
System.out.println("main m = " + m);
} //m 생존 종료
형변환
int -> long -> double작은 범위에서 큰 범위로 대입은 허용한다
자바에서 숫자를 표현할 수 있는 범위는 다음과 같다.
int < long < double
int 보다는 long 이, long 보다는 double 이 더 큰 범위를 표현할 수 있다.
// 1차원 배열
public class Array1 {
public static void main(String[] args) {
// 여기도 students 를 한번에 사용 가능
int[] students; // 배열 변수 선언
students = new int[]{90,80,70,60,50}; // 배열 생성과 초기화
for (int i = 0; i<students.length; i++){
System.out.println("학생" + (i+1) + " 점수:" + students[i]);
}
}
}
// 1차원 배열 리팩토링
public class Array1 {
public static void main(String[] args) {
// 여기도 students 를 한번에 사용 가능
int[] students = {90,80,70,60,50}; // 배열 생성과 초기화
for (int i = 0; i<students.length; i++){
System.out.println("학생" + (i+1) + " 점수:" + students[i]);
}
}
}
public class ArrayDi3 {
public static void main(String[] args) {
int[][] arr = {
{1,2,3},
{4,5,6}
};
// 2차원 배열의 길이를 활용
for (int row = 0; row<arr.length; row++){
for (int column = 0; column<arr[row].length; column++){
System.out.println(arr[row][column] + " ");
}
System.out.println();
}
}
}
# 평균 메서드
public class MethodEx1Ref {
public static void main(String[] args) {
System.out.println("평균값: " + average(1,2,3));
System.out.println("평균값: " + average(15,25,35));
}
public static double average(int a, int b, int c){
int sum = a+b+c;
return sum/3.0;
}
}
메서드 선언(Method Declaration)
public static int add(int a, int b)
메서드의 선언 부분으로, 메서드 이름, 반환 타입, 매개변수(파라미터) 목록을 포함한다.
public static
public : 다른 클래스에서 호출할 수 있는 메서드라는 뜻이다. 접근 제어에서 학습한다.
static : 객체를 생성하지 않고 호출할 수 있는 정적 메서드라는 뜻이다. 자세한 내용은 뒤에서 다룬다.
두 키워드의 자세한 내용은 뒤에서 다룬다. 지금은 단순하게 메서드를 만들 때 둘을 사용해야 한다고 생각하자.
int add(int a, int b)
int : 반환 타입을 정의한다. 메서드의 실행 결과를 반환할 때 사용할 반환 타입을 지정한다.
add : 메서드에 이름을 부여한다. 이 이름으로 메서드를 호출할 수 있다.
(int a, int b) : 메서드를 호출할 때 전달하는 입력 값을 정의한다. 이 변수들은 해당 메서드 안에서만 사용된다. 이렇게 메서드 선언에 사용되는 변수를 매개변수라 한다.
메서드 본문(Method Body)
{
System.out.println(a + "+" + b + " 연산 수행");
int sum = a + b;
return sum;
}
메서드 호출
앞서 정의한 메서드를 호출해서 실행하려면 메서드 이름에 입력 값을 전달하면 된다. 보통 메서드를 호출한다고 표현한다.
int sum1 = add(5, 10);
int sum2 = add(15, 20);
public class Method2 {
public static void main(String[] args) {
printHeader();
System.out.println("프로그램이 동작합니다.");
printFooter();
}
public static void printHeader() {
System.out.println("= 프로그램을 시작합니다 =");
return; //void의 경우 생략 가능
}
public static void printFooter() {
System.out.println("= 프로그램을 종료합니다 =");
}
}
printHeader() , printFooter() 메서드는 매개변수가 없고, 반환 타입도 없다.
선언: public static void printHeader() 와 같이 매개변수를 비워두고 정의하면 된다.
호출: printHeader(); 와 같이 인수를 비워두고 호출하면 된다.
선언: public static void printHeader() 와 같이 반환 타입을 void 로 정의하면 된다.
호출: printHeader(); 와 같이 반환 타입이 없으므로 메서드만 호출하고 반환 값을 받지 않으면 된다.
String str = printHeader(); 반환 타입이 void 이기 때문에 이렇게 반환 값을 받으면 컴파일 오류가 발생한다.
모든 메서드는 항상 return 을 호출해야 한다. 그런데 반환 타입 void 의 경우에는 예외로 printFooter() 와 같이 생략해도 된다. 자바가 반환 타입이 없는 경우에는 return 을 마지막줄에 넣어준다. 참고로 return 을 만나면 해당 메서드는 종료된다.
- 반환 타입이 있으면 반드시 값을 반환해야 한다.
- 여기서 else 가 없으면 return값이 반환되지 않을 수 있어 에러 발생 가능
public class MethodReturn1 {
public static void main(String[] args) {
boolean result = odd(2);
System.out.println(result);
}
public static boolean odd(int i) {
if (i % 2 == 1) {
return true;
} else {
return false;
}
- 자바의 대원칙 : 자바는 항상 변수의 값을 복사해서 대입한다.
public class MethodValue3 {
public static void main(String[] args) {
int num1 = 5;
System.out.println("changeNumber 호출 전, num1: " + num1); // 출력: 5
num1 = changeNumber(num1);
System.out.println("changeNumber 호출 후, num1: " + num1); // 출력: 10
}
public static int changeNumber(int num2) {
num2 = num2 * 2;
return num2;
}
}

메서드 오버로딩 : 다음과 같이 이름이 같고, 매개변수가 다른 메서드를 정의할 수 있다.
오버로딩 성공
add(int a, int b)
add(int a, int b, int c)
add(double a, double b)
이렇게 이름이 같고 매개변수가 다른 메서드를 여러개 정의하는 것을 메서드 오버로딩(Overloading)이라 한다. 오버로딩은 번역하면 과적인데, 과하게 물건을 담았다는 뜻이다. 따라서 같은 이름의 메서드를 여러개 정의했다고 이해하면 된다.