JAVA - 3. 클래스, 메소드, 생성자

CodeModel·2024년 1월 12일
0

자바

목록 보기
4/8

클래스

클래스 : 붕어빵을 만드는 틀
객체(인스턴스) : 붕어빵 - 메모리에 올라간 클래스

// 붕어빵 틀
public class Car {}

// 붕어빵 만들기
public class Car {
	// 자바 기본 메인 함수
	public static void main(String[] args) {
    	Car c1 = new Car(); // 붕어빵1 인스턴스를 만든다
        Car c2 = new Car(); // 붕어빵2 인스턴스를 만든다
        // new 는 클래스를 메모리에 올려달라는 뜻
    }
}

필드

자동차가 있다. 자동차는 이름이 있고 번호가 있다. 이런 속성을 자바에서는 필드라고 한다. 한반에 20명의 학생이 있다. 그것은 20개의 인스턴스가 있다는 뜻 이다. 각각의 인스턴스는 필드가 다르다.

public class Car {
	// 타입 필드명
    String name;
    int number;
}
// 자바 메인 함수
main {
 Car car1 = new Car();
 car1.name = "소방차"
 car2.number = 1234
}

메소드 선언

객체지향 - 하나의 사물을 하나의 클래스로 선언
사물 - 상태와 행동으로 나뉜다
필드 - 상태 ex) 이름, 번호
메소드 - 행동 ex) 전진, 후진

메소드는 입력값을 받아서 결과값을 도출해 내는 함수과 비슷한 느낌
입력값 - 인자(Argument) : 어떤 함수를 호출 시 전달되는 값 / 호출
매개변수(Parameter) : 전달된 인자를 받아들이는 변수 / 받아들이기

결과값 : 리턴값

선언

public class MyClass {
	// 메소드의 양식
	public 리턴타입 메소드명 (매개변수1,매개변수2...) { 기능 구현 }
    // 리턴 타입 X 매개변수 X
    public void method1 () { // void는 리턴값이 없을 때 설정한다
    	System.out.println("리턴타입,매개변수 없는 메소드 실행")
    }
    // 리턴타입 X 매개변수 O
    public void method2 (int x) {
    	System.out.println(x + "매개변수를 받았어요")
    }
    
    // 리턴타입 O 매개변수 X
    public int method3 () {
    	return 10;
    }
    
    // 리턴타입 O 매개변수 O
    public int method4 (int x) {
    	System.out.println(x + "매개변수를 받았어요")
        return x;
    }
}

메소드 사용

위의 MyClass 사용해보겠다. 메소드를 사용하기 위해선 인스턴스를 먼저 만들어야 한다. 붕어빵틀이 있어도 붕어빵을 먹기 위해서는 붕어빵을 만들어야 한다는 것과 유사하다.

MyClass myclass = new MyClass ();
myclass.method1();
// return 값이 int이기 때문에 value에 return 값이 들어간다.
int value = myclass.method4(10)

static

클래스는 인스턴스를 생성하지 않으면 사용할 수 없다
하지만 static을 붙이면 클래스의 인스턴스를 생성하지 않아도 static한 메서드나 필드를 사용할 수 있다.(static 메서드는 static을 앞에 붙인 것 )
또한 static한 메소드 내에서 static 하지 않은 필드를 사용할 수 없다.

public class MyScope {
	int global = 10;
	static int staticGlobal = 10;

	public static voide main(String[] args) {
    	global 			// 사용 불가능
        staticGlobal 	// 사용 가능
        
        MyScope v1 = new MyScope();
        MyScope v2 = new MyScope();
        
        v1.global = 10;
        v2.global = 20;
        // v1.global 은 10이 나오고 v2.global 은 20이 나온다
        
        v1.staticGlobal = 10;
        v2.staticGlobal = 20;
        // v1.global 은 20이 나오고 v2.global 은 20이 나온다. 저장 공간이 하나기 때문
        
        MyScope.staticGlobal // static 변수는 이렇게 쓰는게 바람직하다
        
        
    }
}

이넘(열거형)

열거형은 jdk5에서 추가된 문법. 열거형 이전에는 static과 final을 이용해서 사용했었다.

enum Gender {
	MALE,FEMALE // 이 2개의 값 이외에는 사용할 수 없다
}

public class EnumExam {
	public staitc final String MALE = "MALE"

	public static void main(String[] args) {
		String gender1;
    	gender1 = EnumExam.MALE; // 하지만 젠더에는 다른 문자를 넣을 수도 있다
        
        Gender gender2;
        gender2 = Gender.MALE;
        gender 2 = "boy" // 오류 발생
	}
}

생성자

  1. 메소드와 다르게 return 타입을 가지고 있지 않다
  2. 생성자를 프로그래머가 만들지 않으면 매개변수가 없는 생성자가 컴파일 할 때 자동으로 만들어진다
  3. 생성자가 하나라도 만들어져 있다면 기본 생성자는 만들어지지 않는다.

기본 생성자 - 매개변수가 없는 생성자

그렇기 때문에 우리가 클래스를 만들었을 때 생성자가 없다면 기본 생성자가 자동으로 생성되는 것 이다.

// 생성자가 없는 클래스 - 컴파일시 기본 생성자가 생성된다
public class Car1 {
	String name;
}

// 생성자가 있는 클래스 - 기본 생성자는 생성되지 않는다
public class Car2 {
	String name;
    
    // 생성자 생성
    public Car2(String s) {
    	name = s;
    }
}

main {
	Car1 car1 = new Car1() // 기본 생성자가 있기 때문에 오류 X
    Car2 car2 = new Car2() // 기본 생성자가 없기 때문에 오류 O
    Car2 car3 = new Car2("아반떼") // 생성자의 매개변수에 맞기 때문에 오류 X
}
profile
개발자가 되기 위한 일기

0개의 댓글