JAVA/JAVA 개념
JAVA 개념 2-2 - 변수와 메서드
kms152000
2022. 9. 28. 17:11
변수
: 데이터를 저장하기 위한 메모리 공간에 대한 이름으로 저장할 데이터의 크기를 알아야 필요한 공간을 확보할 수 있습니다. 그러므로 적절한 자료형을 사용하는 것은 중요합니다.
객체지향 프로그램 언어에서는 클래스 타입을 자료형으로 사용할 수 있고, 최신 언어들의 경우, 메모리 공간의 크기를 계산하기 위한 용도보다는 타입을 구분하는 개념으로 접근하고 있습니다.
자바의 경우, 원시 자료형(Primitive Type)과 클래스 타입(Class Type)을 모두 지원하고 있으며 원시 자료형에 대한 클래스 타입들은 랩퍼 클래스(Wrapper Class)라고 합니다.
1) 변수 선언 방법
[접근제어자] 타입 변수명
- 접근제어자 : 변수의 접근범위를 지정합니다.
- 타입 : 자료형으로 자바는 명시적으로 타입을 지정해야 합니다.
- 자료형에는 원시자료형과 객체타입의 변수는 참조 변수라고 합니다.
- 객체 지향에서는 클래스 부분에 선언된 변수는 필드 혹은 멤버 변수라고 합니다.
int num1 = 15; // 원시자료형 정수 타입
String msg = "Hello"; // 객체타입 문자열 타입
Member member = new Member(); // 객체타입 Member 클래스 타입
2) 원시자료형(Primitive type)
: 기본적으로 숫자형 데이터 타입입니다. 정수, 실수, 문자, 논리형이 있습니다.
- 자바에서는 유니코드를 기본으로 지원하기 때문에 문자 처리에 2바이트가 필요합니다.
- 문자 출력은 유니코드 번호에 등록된 문자가 출력되므로 실제 char에 저장되는 값은 유니코드 번호 숫자 값입니다.
- JVM에서 피연산자를 4바이트 단위로 처리하기 때문에 int보다 작은 자료형의 값을 연산하는 경우 자동으로 int로 변환되어 처리됩니다.
- float형을 지정하기 위해서는 실수 값 뒤에 F/f를 붙여줘야 합니다.
- 정수 값을 long형으로 처리하기 위해 뒤에 L/l을 붙여줘야 합니다.
- 문자열은 원시자료형이 아닌 클래스 타입입니다.
3) 다양한 변수 사용 예시
int num1; // 정수형 변수
char c1 = 'a'; // 문자형 변수를 선언하고 `a`로 초기화
long num2 = 12L; // long 정수형 변수를 선언.
float num3 = 17.4F; // float 실수형 변수를 선언.
boolean result = true; // 논리형 변수를 선언하고 true 로 초기화.
4) 자바 변수 유형
- 멤버 변수(Member variable)
- 클래스부에 선언된 변수들로 객체의 속성에 해당합니다.
- 인스턴스 변수와 클래스 변수로 구분됩니다.
- 인스턴스 변수(Instance variable)
- 클래스가 인스턴스 될 때 초기화되는 변수입니다.
- 인스턴스를 통해서만 접근할 수 있습니다.
- 매개 변수(Parameter)
- 메서드에 인자로 전달되는 값을 받기 위한 변수입니다.
- 메서드 내에서는 지역변수처럼 사용됩니다.
- 지역 변수(Local variable)
- 메서드 내에서 선언된 변수입니다.
- 멤버 변수와 동일한 이름을 가질 수 있으며 지역변수가 우선입니다.
- 클래스 변수(Class variable)
- static으로 선언된 변수입니다.
- 인스턴스 생성 없이 클래스 이름.변수명으로 사용 가능합니다.
- main() 메서드에서 참조 가능합니다.
5) 다양한 변수 유형 예제
public class Variables {
// 멤버 변수, 인스턴스 변수
int num1;
// 멤버 변수, 클래스 변수
static int num2;
// 매개변수
public void printName(String name) {
// 지역변수
String prtMsg = name + " Hello";
System.out.println(prtMsg);
}
public static void main(String[] args) {
// 인스턴스 생성
Variables mc = new Variables();
// 인스턴스 변수 사용
mc.num1 = 10;
// 클래스 변수 사용
Variables.num2 = 25; // num2 = 25로 사용 가능
// 인자로 매개변수에 값을 전달
mc.printName("숫자");
System.out.printf("%d,%d",mc.num1, Variables.num2);
}
}
- main()에서 Variables의 인스턴스를 생성하고 참조 변수인 mc에 대입합니다.(mc 변수의 타입은 Variables 가 됩니다.)
- mc.num1과 같이 인스턴스 변수와 메서드를 사용 가능합니다.
- main에서 num1 이나 msg 변수 printName() 메서드를 직접 호출하는 것은 안됩니다.
- main 에서 static 변수(클래스 변수)인 num2는 사용 가능.
실행 결과
숫자 Hello
10,25
메서드
: 특정 객체의 동작이나 행위를 정의한 것으로 클래스의 주요 구성요소입니다.
1) 메서드 선언 방법
[접근제어자] 리턴타입 메서드명([인자..] {
}
- 접근제어자 : 메서드의 접근 범위를 지정합니다.
- 리턴 타입을 반드시 명시해야 하며 리턴이 없는 경우에도 void를 사용합니다.
2) 메서드 오버 로딩(Overloading)
- 리턴 값이나 인자가 다른 여러 메서드를 동일한 이름으로 선언하는 것입니다.
3) 가변 인자(Variable arguments)
- 인자의 수가 유동적인 메서드입니다.
- String... msg와 같이 가변 인자를 사용합니다.
4) 생성자 메서드(Constructor method)
- 클래스가 인스턴스 될 때 호출되는 메서드입니다.
- 클래스 실행 시 초기화 작업을 수행합니다.
- 메서드 오버 로딩에 의해 여러 생성자가 있을 수도 있습니다.
5) 메서드 예제
public class Methods {
String name;
// 생성자 메서드
Methods() {
name = "봄";
System.out.printf("#계절: %s\n",name);
}
// 인자가 없는 메서드
void printName() {
System.out.printf("#printName(): %s\n",name);
}
// 인자가 하나인 메서드(메서드 오버로딩), 인자 값이 출력
void printName(String name) {
System.out.printf("#printName(String name): %s\n", name);
}
// 가변인자를 사용한 메서드
void printNames(String...name) {
System.out.println("#printNames(String...name)");
for(String s : name) {
System.out.println(s);
}
}
// 인자가 두개인 메서드
int calc(int num1, int num2){
return num1+num2;
}
public static void main(String[] args) {
Methods m = new Methods();
m.printName();
m.printName("여름");
m.printNames("가을","봄","겨울");
System.out.printf("#calc(int num1, int num2): %d ", m.calc(10,25));
}
}
- 생성자 메서드는 객체가 생성될 때 자동으로 호출합니다.
- 동일한 이름의 메서드는 인자에 따라 해당 메서드가 호출됩니다.
- 가변 인자를 통해 때에 필요한 인자를 전달 가능합니다.
- 리턴이 있는 메서드는 리턴 값을 받아 사용합니다.
6) 실행 결과
#계절: 봄
#printName(): 봄
#printName(String name): 여름
#printNames(String...name)
가을
봄
겨울
#calc(int num1, int num2): 35