본문 바로가기
개발/자바

[Java] 클래스와 객체

by 현석_s 2022. 6. 11.

[Java] 클래스와 객체

클래스와 객체는 제가 대학교 2학년  C++ 기초 수업 때 맨 마지막으로 배웠는데 그때는 그냥 성적을 받기 위해 무지성 암기만 진행해서 정확히 뭔지 잘 감을 못 잡았는데 이제는 주도적으로 배워보니 그때보다 더욱 쉽게 나름대로 이해할 수 있던 거 같습니다.


클래스와 객체

처음에 책을 보고 배워보려니 잘 이해가 되지 않았는데 다양한 유튜브를 통해서 접근해보니 생각보다는 쉽게 느껴졌습니다.

쉽게 클래스는 공장의 설계도 객체는 그 공장에서 만들어진 재료라고 하니 이해가 쉬웠습니다.
흔희 저희가 이야기하는 객체지향프로그램이란 객체에서 만들어진 재료를 쌓아서 만든 결과물이라고 이해할 수 있습니다.   

자바 프로그램은 main함수를 통해서 작동을 하는데 실제 클래스를 객체로 만드는 코드는 아래와 같습니다.

  Npc saram1 = new Npc();

이때 Npc은 클래스 saram1은 변수명 Npc()은 생성자입니다.

class Npc 
{
    // 필드 - 데이터
    String name;
    int hp;
    // 메서드 - 동작
    void say() 
    {
        System.out.println("안녕하세요.");
    }
}

해당 클래스는 데이터를 저장해 놓을 수 있는 필드, 동작을 진행하는 메서드로 이루어져 있습니다.

public class NpcUse 
{
    public static void main(String[] args) {

        Npc saram1 = new Npc();
        saram1.name = "경비";
        saram1.hp = 100;
        System.out.println(saram1.name + ":" +
                           saram1.hp);
        // 메서드 호출
        saram1.say();
    }
}

활용 방법은 [클래스명. 클래스 내의 필드 및 메서드] 이렇식으로 사용할 수 있습니다.


접근 제한자

코드를 작성하다 보면 코드가 복잡해져서 코드를 분리해야 되는 상황이 발생할 수 있습니다. 따로 클래스를 보관할 수 있는 점을 활용하여 클래스와 구동 파일을 분리해서 작성할 수 있습니다.

// 메인파일
package study2;

public class study1 
{
	public static void main(String[] args) {
		test test = new test();
		System.out.println(test.a);
		System.out.println(test.b);
		System.out.println(test.c);
		System.out.println(test.d);
		
	}
}
//Class 파일

package study2;



public class test
{
	public int a = 10;
	protected int b = 20;
	int c = 30;
	private int d = 40;

}

위와 같은 식으로 코딩을 하면 에러가 발생합니다.

왜? 

10번 줄은 private로 정의되어 같은 클래스 내부에서만 접근 가능하기 때문입니다.

public 퍼블릭. 외부 클래스 어디에서나 접근 가능합니다.
protected 프로텍티드. 같은 패키지 내부와 상속 관계의 클래스에서만 접근 가능합니다.
void (작성X) 디폴트. 같은 패키지 내부에서만 접근 가능합니다.
private 프라이빗. 같은 클래스 내부에서만 접근 가능합니다.

 

public의 경우 같은 프로젝트 내에서 진행이 되어 있으면 사용이 가능 하지만 protected와 void는 같은 패키지 내에 있어야 되지만

public class study1 extends test // extends를 활용해 상속 활용

위와 같은 방법으로 상속관계를 만들어서 protected 접근 제한자를 사용할 수 있습니다.

댓글