끄적모음

클래스와 객체

taehyon 2025. 4. 15. 17:43

클래스란?

 

객체를 만들때 필요한 청사진(설계도)

 

그럼 객체란?

 

우리 주변에서 볼 수 있는 사물들이 객체

 

이것을 코드로 한번 살펴보자

 

Person.class - 사람이라는 객체를 만들어서 살펴보자

 

public class Person() { 
		...
}

 

Person 이라는 클래스를 만들었다.

public class Main {
	public static void main(String[] args) {
		Person personA = new Person(); // ✅ 첫번째 객체 생성 
		Person personB = new Person(); // ✅ 두번째 객체 생성
	}
}

 

 

객체를 만들때 new 라는 키워드를 사용한다.

 

객체를 만드는 과정을 인스턴스화 라고 표현한다.

 

인스턴스화가 되면 Java 메모리 상에 객체가 만들어진다.

 

 


 

이제 클래스의 구조를 살펴보자

 

클래스의 구조는 1. 속성 , 2. 생성자 , 3. 기능 부분으로 나누어진다. (속성기로 외우면 편하다)

 

class 클래스 {

	// 1. 속성
		
	// 2. 생성자
		
	// 3. 기능
}

 

 

class 클래스 {

	// 1. 속성
       String name;
       int age;
       String address;
		
	// 2. 생성자
		
	// 3. 기능
}

 

 

 

속성 : 변수 선언으로 표현할 수 있다.

 

객체는 속성(특징)을 작성하는것이다.

 

속성에 접근하려면 어떻게 해야할까???

 

public class Main {

	public static void main(String[] args) {
		
        // 1. 객체 생성
        Person personA = new Person(); 
        Person personB = new Person(); 
			
        // 2. ✅ 객체를 통해 접근 personA 의 name
        System.out.println(personA.name);
        
        // 3. ✅ 객체를 통해 접근 personB 의 name
        System.out.println(personB.name);
	}
}

 

객체를 통해서 속성에 접근할 때 객채가담긴 변수, 속성으로 접근한다.

 

 

이제 생성자를 만들어 보자!!!

생성자 : 객체를 만들때 생성 (객체를 어떻게 만들지 정의해 놓은것 / 생성자가 없으면 클래스를 객체화 시킬 수 없음) 

< 기본생성자 : 클래스를 생성하면 기본생성자는 자동으로 추가 Person() {} >

 

ex ) 생성자 만들어 보기 : 

 

public class Person {
    String name;
        int age;
        String address;
		
        Person() {} // ❌ 기본생성자 제거됨
		
        Person(String name, int age) { // ✅ 새로운 생성자(조립설명서)
            this.name = name; // (this 키워드는 객체 자신을 가리키는 키워드이다)
            this.age = age;
    }
}


: 생성자를 새롭게 정의를 하는 순간에 기본생성자는  사라진다!!


그 다음 main 문으로 돌아와서 보면

 

public class Main {
    public static void main(String[] args) {
        Person personA = new Person(); // ❌ 에러발생 // 생성자와 이름 동일해야함 
        Person personB = new Person(); // ❌ 에러발생
	}
}

 

기존에 만들었던 객체들에 에러가 뜨게 되는데 그때는

 

public class Main {

        public static void main(String[] args) {
            Person personA = new Person("gygim", 10); // ✅ 조립설명서 준수
            Person personB = new Person("Steve", 5);  // ✅ 조립설명서 준수
		}
}

 

이렇게 변경하면 된다.


* 생성자의 특징 : 
1. 클래스와 이름이 같다.  2. 반환티입이 존재하지 않는다. 3. 여러개가 존재할수있다.



기능 :  메서드 부분

 

객체의 기능을 나열한 곳이고, 기능은 메서드로 표현합니다.

 

class Person {
		...
		
        // ✅ 사람의 소개 기능
        void introduce() {
            System.out.println("안녕하세요.");
            System.out.println("나의 이름은 " + this.name + "입니다.");
            System.out.println("나이는 " + this.age + "입니다.");
        }
		
        // ✅ 사람의 더하기 기능
        int sum(int a, int b) {
            int result = a + b;
            return result;
    }
}

 

 

메인클레스에서 이용하는 법

 

public class Main {

        public static void main(String[] args) {
            Person personA = new Person("John", 40);
            personA.introduce(); // ✅ personA 객체 introduce() 호출
            Person personB = new Person("Steve", 5);
    }
}

 




// 게터 - 클래스의 속성을 가져올때 사용하는 기능을 의미

 

String getName() {
    return this.name;
}

int getAge() {
    return this.age;
}

String getAddress() {
    return this.address;
}



// Main 클래스에서 호출

 

String name = person.getName();
int age = person.getAge();
String address = person.getAddress();

 




//세터 - 객체의 속성을 외부에서 설정할 수 있게 해주는 기능

 


//Person 클래스에서 세터를 만들고

 

void getName(String name) {
    this.name = name;
}

void getAge(int age) {
    this.age = age;
}

void setAddress(String address) {
    this.address = address;
}

 


// Main 클래스

 

public class Main {

        public static void main(String[] args) {
            Person personA = new Person("gygim", 20);
            Person personB = new Person("Steve", 15);
				
            personA.setAddress("서울"); // ✅ personA 의 주소 설정
            personB.setAddress("미국"); // ✅ personA 의 주소 설정
				
        }
}

 

 

 

대충 요약( 예제를 통해서 )

 

public class Car {
    String carName;
    String carColor;
    int speed = 100;

    public Car(String carName, String carColor) {
        this.carName = carName;
        this.carColor = carColor;
    }

    public void drive() {
        System.out.println(carName + "의 차량은" + carColor + "색깔입니다.");
    }

    public void accelerate() {
        speed += 10;
        System.out.println("현재 속도는 : " + speed);
    }
}

 

public class Main {

    public static void main(String[] args) {
        Car carName1 = new Car("bmw", "Red");
        carName1.drive();
        carName1.accelerate();
        carName1.accelerate();
        carName1.accelerate();
        carName1.accelerate();
    }
}

 

'끄적모음' 카테고리의 다른 글

레퍼 클래스  (0) 2025.04.15
JVM 메모리  (0) 2025.04.15
자바 공부 5  (1) 2025.04.11
요약 정리 - 자바 5  (0) 2025.04.10
요약 정리 - 자바 4  (0) 2025.04.10