최원종의 개발 블로그

클래스와 객체 본문

Java/Java 객체지향

클래스와 객체

chl6698 2026. 2. 24. 09:00

클래스 개념

자바에서 클래스(Class)는 객체를 생성하기 위한 템플릿 또는 설계도 역할.

클래스는 객체의 상태를 나타내는 필드(변수)와 객체의 행동을 정의하는 메서드(함수)로 구성됨.

클래스는 데이터와 그 데이터를 조작하는 코드를 묶어놓은 컨테이너와 같음.

 

클래스 실습

클래스를 만드는 규칙

  • 클래스는 대문자로 시작하는 것이 좋음.
  • 파스칼 케이스 명명 규칙 사용하기
package ch05;

//클래스 파일 생성 - 클래스를 설계하는 코드 측
//2. 클래스는 객체를 만들기 위한 설계도면이다
//학생이라는 설계도를 만들어보자
public class Student {
    String name;//이름
    int grade;//학년
    int age;//나이
    double height;//키
    double weight;//몸무게

}//end of class
// 위 코드는 학생을 프로그램 세상에 올리기 전 설계 도면이다.
// 현재는 상태(속성) 만 설계한 코드이다.
package ch05;

public class Book {

    //클래스의 속성(필드) 선언
    String title;
    String author;
    int publishYear;
    int totalPage;
}

 

 

클래스를 인스턴스화시키기

package ch05;

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


        // 프로스램 세상에 존재할 수 있도록 메모리 올려보자.
        //Student 클래스를 인트턴트화했다.(즉 클래스 메모리 올릴 때 new키워드 생성자()사용
        int a = 10;
        System.out.println("a(변수이름) : " + a);//값이 출력됨
        Student s1 = new Student();
        System.out.println("s1 (변수이름) : " + s1);//주소값이 출력 됨

        //변수에 가장 큰 2가지 종류
        //1. 기본 데이터 타입(상자에 값이 담긴다)
        //2.참조타입(상자에 주소값이 담긴다)
    }
}

 

package ch05;

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

        //Heap 메모리에 올려 보자 (인스턴스화 한다)
        //클래스는 여러번 사용할 수 있다.
        Book b1 = new Book();//메모리에 올라가면 우리는 객체라 부룰 수 있다(인스턴스)
        Book b2 = new Book();
        Book b3 = new Book();
        System.out.println(b1);
        System.out.println(b2);
        System.out.println(b3);

    }//end of main
}// end of class

 

 

스택과 힙 개념

자바의 메모리 영역인 스택과 힙은 런타임 데이터 영역.

스택은 메서드 호출 시 지역변수와 기본형 데이터를 저장, 호출 종료 시 자동 해제.

힙은 new 연산자로 생성된 객체와 인스턴스 변수를 저장, 가비지 컬렉터에 관리되는 동적 메모리 공간.

 

프로그래밍이 실행되는 시점에 동작(Run Time)

 

주소가 가리키는 곳

 

 

객체에 값 할당

하나의 클래스 설계로 여러 개의 객체를 만들 수 있다.

package ch05;

//클래스를 설계하는 측 코드

public class Warrior {

    String name;
    int hp;
    int attackPower;
    int defensePower;
    double height;
    double weight;
    String color;
}
package ch05;

//코드를 수행해 보는 측
public class WarriorMainTest {
    //코드의 진입점
    public static void main(String[] args) {

        //new - 키워드, () - 생성자
        Warrior w1 = new Warrior();
        w1.name = "티모";
        w1.height = 50;
        w1.attackPower = 10;

        Warrior w2 = new Warrior();
        w2.name = "야스오";
        w2.height = 100;
        w2.attackPower = 100;
        System.out.println("w1 에 name : " + w1.name);
        System.out.println("w2 에 name : " + w2.name);

    }//end of main
}//end of class
더보기
출력결과

 

(.) 연산자 이해

우선순위가 아주 높음.

자바 프로그램을 실행시켰을 때 메모리를 할당받음.

Heap 메모리 영역에 올라가는 객체에 접근은 (.) 연산자를 통해 할 수 있음.

.연산자 사용시 구조 이해

 

 

클래스 설계 연습문제

package ch05;

//클래스를 설계하는 측
public class Ork {
    // 멤버 변수
    //멤버 변수는 값을 할당하지 않으면
    //기본 값으로 초기화 되어서 메모리에 올라간다.
    //문자열에 값을 할당하지 않으면 기본값 null이 들어간다
    String gender;
    String color;
    int power;
    double height;
    double weight;
    String attackType;
}
package ch05;

//코드를 실행하는 측
public class OrkMainTest {
    //메인함수
    public static void main(String[] args) {
        // a - 함수 영역 안에 있다고 해서
        //지역 변수 라고 부를 수 있다.
        int a = 10;
        Ork o1 = new Ork();
        o1.gender = "수컷";
        o1.attackType = "근접전사";
        o1.color = "초록색";
        o1.height = 170;
        o1.weight = 80;
        o1.power = 50;

        System.out.println("전투 스타일 : " + o1.attackType);
        System.out.println("성별 : " + o1.gender);
        System.out.println("키 : " + o1.height);
        System.out.println("몸무게 : " + o1.weight);
        System.out.println("힘 : " + o1.power);
        // 객체에 접근 하려면 반드시 메모리에 올라가야한다. (.연산자)
    }
}
더보기
출력결과

 

 

컴파일 시점 심화

컴파일 시점 심화

 

'Java > Java 객체지향' 카테고리의 다른 글

객체지향 프로그래밍(객체간 상호작용)  (1) 2026.02.25
생성자  (0) 2026.02.24
메서드  (0) 2026.02.24
함수  (0) 2026.02.24
OPP(객체지향) 개념  (0) 2026.02.23