본문 바로가기
프로그래밍 공부/Java

[lesson] Java 프로그래밍 언어 - 클래스

by Luna_lua 2021. 7. 27.
반응형

저번에 메소드를 배워봤는데 기본구조에서 배운것과 메소드를 보면 클래스가 무엇일까? 라는 의문이 듭니다.

그래서 오늘은 클래스란 무엇인지 알아보려 합니다~

 

영어 class는 반, 수업 등의 의미가 있는데 여러 학생들을 모아 하나의 반으로 묶어 놓은것과 같이

클래스란 공통요소를 한 번만 선언해 놓고 가져다 사용만 하도록 설계해놓은 것입니다.

 

추상적인 개념이라고 하며, 공통 요소를 매번 선언하는 작업이 불편하기 때문에 클래스를 선언하여

필드에 공통 요소를 한 번씩만 선언하고 클래스 타입의 객체로 사용한다.
하나의 클래스 타입으로 여러 개의 객체를 생성할 수 있다.

 

 

중요한건 

1. 클래스도 타입이다라는것입니다.

  -> 클래스 안에 선언된 변수와 메소드를 사용하고 싶다면, 해당 클래스 타입으로 변수를 선언해야 합니다.

// 클래스 선언
class A{
	// 기본 생성자
	public A() {
		// TODO Auto-generated constructor stub
		System.out.println("기본 생성자 호출");
	}
	
	// A 클래스의 변수
	int data=100;
	
    // A 클래스의 메소드
	void printData () {
		System.out.println(data);
	}
}


public class ClassTest {
	public static void main(String[] args) {
		// A클래스타입으로 변수 생성
        	A a = new A();
        	System.out.println(a);
        	// A클래스의 printData() 메소드 사용
        	a.printData();
	}
}

 

2. 주어입니다. 뜬금없이 갑자기 주어? 라고 생각할 수도 있지만 아래의 내용을 보시면 이해하시지 않을까 싶습니다.

예를 들어볼까요?

 

원숭이가 바나나를 먹는다

monkey eats the banana

여기서 기억하시나요? 메소드는 동사로 만들어라! 이걸로 둘이 합쳐보면

monkey eats the banana -> monkey.eat("banana")

그런데 영어의 첫문장은 대문자로 만드는 규칙으로 

monkey.eat("banana") ->> Monkey.eat("banana");

여기서 클래스가 주어다! 라는것과 클래스는 대문자로 시작해야한다! 라는 내용이 나옵니다.

이렇게 읽어보시면 클래스명은 대문자로 시작한다! 라는 내용을 잊지 못하실거에요~^^

 

 

그럼 클래스가 뭔지 보았으니 클래스 선언 방법을 알아볼까요?

<클래스 선언>

class A{
	// 필드(변수, 메소드)
	// A 클래스의 변수
	int data=100;
	
    // A 클래스의 메소드
	void printData () {
		System.out.println(data);
	}
}

 

<클래스의 필드를 사용하는 방법>

1. 객체화 (new 자동차) : 객체를 만드는 작업, 추상적인 개념을 구체화시키는 작업
클래스명 객체명 = new 생성자();
 : 하위 연산자, 멤버변수 접근 연산자, 닷 연산자, 점 연산자  A.b : A안에 b

=> 위의 내용으로 객체를 생성하면 new 생성자(); 로 인하여 지정된 생성자가 작동되고 객체가 생성됩니다.

public static void main(String[] args) {
	// A클래스타입으로 변수 생성
        A a = new A();
        System.out.println(a);
        // A클래스의 printData() 메소드 사용
        a.printData();
	}


2. 클래스로 접근 : static 키워드가 붙은 필드는 new로 메모리를 할당하지 않고 컴파일러가 자동으로 할당하기 때문에
클래스명으로 직접 접근하여 사용한다.

public class Test2 {
	
    // public은 접근 권한자로서 나중에 따로 설명 예정입니다.
    // static 또한 공용의 목적이며, 이 클래스가 구현되기 전에 메모리에 있는 내용으로 나중에 따로 설명할 예정입니다.
	public static int mul(int num1, int num2){ 
		int result = num1 * num2;
		return result;
	}
	
	public static void main(String[] args) {
		int value = mul(2,4);
		System.out.println(value);
	}
}


<생성자>

클래스 이름 뒤에 소괄호가 있는 형태이며, 메소드와 기능이 똑같지만 메소드라고 부르지 않는다. 

생성자는 리턴이라는 기능이 존재하지 않기 때문이다.

1. 해당 클래스의 필드를 메모리에 할당한 후 부여된 주소값을 가져온다.
2. 초기화 ( 단축키 : (alt + shift + s , o) - eclipse기준)

// 클래스 선언
class A{
	int age;
    int name;
    
    // 기본 생성자
	public A() {
		// TODO Auto-generated constructor stub
		System.out.println("기본 생성자 호출");
	}
    
    // 이런한 생성자를 만드려면 기본생성자도 만들어주어야 하며, 
    // 생성자가 하나도 없다면 컴파일러가 자동으로 기본 생성자를 만들어준다.
    public A(int age, String name){
    // 생성자로 초기화
    this.age = age;
    this.name = name;
    }
}

기본 생성자

1. 매개변수가 없는 생성자이다.
 - 클래스를 선언하자 마자 코드에는 보이지 않지만 자동으로 매개변수가 없는 생성자가 선언된다. 이를 기본생성자라고 한다.
   만약 사용자가 직접 생성자를 선언하면 선언한 생성자가 기본 생성자로 된다.

 

<this>

필드에 접근한 객체가 누구인지 알아야 해당 필드에 접근할 수 있다.
이 때 접근한 객체가 가지고 있는 필드의 주소값을 this라는 변수에 담을 수 있으며, 자동으로 담기게 된다.

 

 

<instance>

for example, for instance = 예를 든다 => 추상적인 내용을 구체화 시킨다.

-> instance variable : 객체

=> 객체화 (구체화 시키는 작업)이라고 부릅니다.

반응형