필드란?
필드는 클래스에 포함된 변수를 의미함.
객체의 속성을 정의할때 사용함.
자바에서의 변수는 크게 세가지로 구분됨
- 클래스 변수
- 인스턴스 변수
- 지역변수
보통 필드라고 부르는 것은 클래스변수와 인스턴지 변수이며
이 둘은 다시 static 키원드의 유무로 구분할수 있음.
좀더 구체적으로 static 키워드가 함께 선언된 것은 클래스 변수 그렇지 않은것은 인스턴스 변수라고 함
class Example { // => 클래스 영역
int instanceVariable; // 인스턴스 변수
static int classVariable; // 클래스 변수(static 변수, 공유변수)
void method() { // => 메서드 영역
int localVariable = 0; // 지역 변수. {}블록 안에서만 유효
}
}
static 키워드 - 다시 공부하기(실습도 해보기)
정적 메서드 → 어딘가에 고정되어 있다
클래스 변수는 static 에 붙어 있기에 클래스에 고정값
static 이 붙으면 new 를 통해서 만들지 않아도 사용 가능?
static 이 붙으면 메서드든 필드든 객체를 만들지 않아도 클래스에서 접근 가능
static 이 붙은건 예외임
public class StaticExampleV1 {
// Static, 정적, 모든 객체와 메모리를 공유
public String instanceVariable = "저는 인스턴스 변수입니다.";
public static String classVariable = "저는 클래스 변수입니다.";
public static void classMethod() {
System.out.println(instanceVariable); --> 오류남 왜?
System.out.println(classVariable);
}
public void instanceMethod() {
System.out.println(instanceVariable);
System.out.println(classVariable);
}
}
오류가 나는 이유는?
중요한점
적 필드는 객체 간 공유 변수의 성질이 있다는 점
정적 메서드의 경우 인스턴스 변수 또는 인스턴스 메서드를 사용할 수 없다는 것
메서드(Method)
특정 작업을 수행하는 일련의 명령문들의 집합을 의미함.
void 가 없다면 return 필요!!!!!
void printHello() { // 반환타입이 void인 메서드
System.out.println("hello!");
}
int getNumSeven() { // 매개변수가 없는 메서드
return 7;
}
메서드의 호출
메서드이름(매개변수1, 매개변수2, ...); // 메서드 호출방법. 매개 변수가 없을 수도 있음.
printHello(); // 위의 코드 예제 호출
getNumSeven();
multiply(4, 4.0);
//출력값
hello!
7
16.0
메서드 호출 시 괄호() 안에 넣어주는 입력 값을 우리는 ‘인자(argument)’라고 하는데, 인자의 개수와 순서는 반드시 메서드를 정의할 때 선언된 매개변수와 일치되어야함
메서드 오버로딩
메서드 오버로딩이란 하나의 클래스 안에 같은 이름의 메서드를 여러 개 정의하는 것
(하나의 메서드가 보통은 한개의 기능만 정의?)
메서드 오버로딩. 같은 이름의 메서드를 다양하게 정의 가능.
public class Overloading {
public static void main(String[] args) {
Shape s = new Shape(); // 객체 생성
s.area(); // 메서드 호출
s.area(5);
s.area(10,10);
s.area(6.0, 12.0);
}
}
class Shape {
public void area() { // 메서드 오버로딩. 같은 이름의 메서드 4개.
System.out.println("넓이");
}
public void area(int r) {
System.out.println("원 넓이 = " + 3.14 * r * r);
}
public void area(int w, int l) {
System.out.println("직사각형 넓이 = " + w * l);
}
public void area(double b, double h) {
System.out.println("삼각형 넓이 = " + 0.5 * b * h);
}
}
//출력값
넓이
원 넓이 = 78.5
직사각형 넓이 = 100
삼각형 넓이 = 36.0
모든 메서드들이 area()라는 메서드면니 같음에도 불구하고 각기 다른 출력값을 리턴하는것을 확인가능.
무조건 같은 메서드명을 사용한다고 해서 오버로딩이 되는것은 아니라는 것!!
오버로딩이 성립하기 위해서는 두가지의 조건이 성립되어햐 함
같은 이름의 메서드명을 써줘야 하며 매게변수의 개수나 타입이 다르게 정의되어야 한다.
- 이 조건이 하나라도 충족이 되지 않는다면 중복 정의로 간주되어 컴파일 에러가 발생
오버로딩의 장점은?
하나의 메서드로 여러 경우의 수를 해결할수 있다는 점.
return 타입 신경쓰지 않음
//예시 위에껄로 만들어보기
각각의 타입별로 오버로딩 만들어보기 (수업시간 실)
public class test {
public static void main(String[] args) {
//객체 생성
SumType s = new SumType();
//메서드 호출
s.sum(1,2);
s.sum(1,2,3,4);
int [] arr = {1,2,3,4,5};
s.sum(arr);
//출력
System.out.println(s.sum(1,2));
System.out.println(s.sum(1,2,3,4));
System.out.println(s.sum(arr));
}
}
class SumType {
public int sum(int num1, int num2){
return num1 + num2;
}
public int sum(int num1, int num2, int num3, int num4){
return num1 + num2 + num3 + num4;
}
public int sum(int [] arr){
int result = 0;
for(int i = 0; i < arr.length; i++){
result += arr[i];
}
return result;
}
}
'IT > JAVA' 카테고리의 다른 글
JAVA - 내부 클래스 (0) | 2024.11.27 |
---|---|
JAVA - 생성자(Constructor) (1) | 2024.11.26 |
JAVA - OOP , 클래스와 객체 (1) | 2024.11.26 |
Java - 배열 (0) | 2024.11.22 |
JAVA - 반복문 문제풀이 (0) | 2024.11.22 |