java - 클래스

yunzivv·2025년 3월 10일

JAVA 기초

목록 보기
10/23

클래스


클래스란 객체를 정의하는 설계도라고 볼 수 있다. 많이 사용하는 예시로 설명하자면 붕어빵 틀클래스, 붕어빵객체이다.
붕어빵 틀 하나로 붕어빵을 여러개 찍어낼 수 있듯이 클래스로 같은 모양의 객체를 여러개 만들어 낼 수 있다.

내가 지금까지 코드를 작성해왔던 공간도 Main 클래스 내부였다.

public class Main { // 여기부터
	
    public static void main(String[] args) {
    
    }
// 여기까지!!
}

글자로만 끄적이면 이해가 잘 안되니 코드와 함께 직접 회원 정보를 저장하는 객체와 그 객체를 만들기 위한 설계도인 Member 클래스를 만들고,
클래스의 구성요소와 사용법을 알아보자.


1. 클래스 생성


일단 같은 모양의 객체를 만들어 낼 클래스를 먼저 생성한다.

class Member {
	// 필드
    // 메서드
}

2. 속성과 기능


속성과 기능을 합쳐 멤버라고도 표현한다.

속성

  • 속성은 객체가 가질 명사이다.
  • 속성, 단순데이터, 객체 변수, 인스턴스 변수, 필드(field)는 같은 의미를 가진다.
  • Member 클래스는 회원의 이름, 나이 정보를 포함한다.
class Member {
	// 필드
	String name;
    int age;
    
    // 메서드
}

기능

  • 기능은 객체가 할 동사다.
  • 기능, 실행데이터, 메서드(method)는 같은 의미를 가진다.
  • Member 클래스는 레벨업의 기능을 수행할 수 있다.
class Member {
	// 필드
	String name;
    int age;
    
    // 메서드
    void LevelUp(){
    	 System.out.println("레벨업");
    }
}

static

필드와 메서드는 인스턴스를 생성하여 접근할 수 있다. 하지만 static 키워드가 붙은 멤버는 객체 생성과 무관하다. 외부에서 바로 접근할 수 있고, 인스턴스에 존재하지 않고 클래스에 존재하여 값을 공유한다.

static 변수를 클래스 변수라고도 한다.

class a {
	int a; // 인스턴스 변수
    static int b; // 클래스 변수
}

3. 객체 생성


new 클래스명()을 사용하여 객체를 생성한다. 만든 객체는 변수에 연결하여 제어할 수 있다.

클래스이름 변수명 = new 클래스이름();
  1. new 클래스이름()으로 객체를 생성한다.
  2. 클래스이름타입의 변수명에 만든 객체를 연결한다.
    • 클래스이름 타입이 뭔가 싶겠지만 int 같은 자료형이라고 생각하면 된다.
      int a;에는 int 타입만 저장할 수 있듯이 객체의 리모컨(주소) 타입만 담을 수 있는 변수를 만든 것이다.
  3. 변수명에는 생성한 객체의 리모컨(주소)이 저장된다.
  4. 객체에 연결했으니 변수명.필드 또는 변수명.메서드 형식으로 접근할 수도 있다.
class Main {
	public static void main(String[] args) {
    	Member aMem = new Member(); 
        aMem.name = "강낭콩"; // 인스턴스 변수
        aMem.age = 22;
    }
}
class Member {
	// 필드
	String name;
    int age;
    
    // 메서드
    void LevelUp(){
    	 System.out.println("레벨업");
    }
}
  • 인스턴스 : 클래스로 만든 객체. 객체와 같은 뜻 같지만 객체와 인스턴스가 같은 뜻은 아니다.
    aMem에 연결된 객체는 Member의 인스턴스이다.
    현재 Member의 인스턴스는 aMem에 연결된 객체 한 개다.
    New라는 새로운 클래스가 있다고 가정할 때, aMem은 객체이지만 New의 인스턴스는 아니다.

this


현재 인스턴스를 가리키는 참조 변수. 인스턴스 변수에 저장된 값을 가르킨다.


사용 예시

class Main {
	public static void main(String[] args) {
    	Member aMem = new Member(); 
        aMem.name = "강낭콩"; // 인스턴스 변수
        aMem.age = 22;
        aMem.LevelUp(); // 1
    }
}
class Member {
	// 필드
	String name;
    int age;
    
    // 메서드
    void LevelUp(){ // 2
    	 System.out.println("%s 레벨업", this.name); 
    }
}
출력
강낭콩 레벨업
  1. aMem이 가르키는 객체의 LevelUp함수를 실행한다.
  2. LevelUp함수는 인스턴스 변수aMem.name에 저장된 강낭콩을 사용하여 강낭콩 레벨업을 출력한다.

일회용객체
지금까지는 생성한 객체를 재사용하기 위해 변수에 연결해두었지만, 변수에 연결해두지 않고 객체 생성만 할 수도 있다. 이 때 이 객체는 1회용 객체다. 즉, 다시 접근하지 못한다.

class Main {
	public static void main(String[] args) {
    	new Myclass.hi() // 변수에 연결하지 않는 객체 생성
        new Myclass.hi() // 일회용 객체 생성
    }
}

class MyClass {
    
    static void hi(){
    	 System.out.println("hi 실행");
    }
}

변수에 연결하지 않은 객체를 만들어 hi()함수를 실행한다. 이 때 만들어진 객체는 함수 실행이 끝날 때 함께 사라진다.
new 키워드로 객체를 2개 만들었는데 이 둘은 서로 전혀 관련이 없는 객체이다.


각각의 명칭이 너무 다양해서 헷갈린다. -> 자주 보면서 익숙해지거나 외워야 할 필요가 있다.
또 클래스를 배우면서 객체지향(OOP)에 대해 조금 알게된 거 같다. 이전에 자격증 공부를 하면서 무작정 외웠던 것들 퍼즐조각들이 하나씩 맞춰지는 느낌이다.
그렇지만 객체지향이 뭔지 물어본다면 멋지게 답변할 수 있도록 개념을 더 확실히 해야할 것 같다.

0개의 댓글