자바에서 클래스란?
자바에서 클래스는 객체 지향 프로그래밍의 기본적인 개념 중 하나입니다.
클래스는 프로그램에서 사용될 객체의 틀을 정의하며, 객체를 생성하기 위한 설계도 역할을 합니다.
클래스는 여러 가지 멤버 변수와 메서드를 포함하며, 이들을 적절히 구성하여 객체의 동작을 정의합니다.
구성요소 | 역할 |
멤버 변수 | 클래스 내에서 사용되는 변수. 클래스의 속성을 나타냄. 인스턴스 변수(instance variable)라고도 함. |
메서드 | 클래스 내에서 사용되는 함수. 클래스의 동작을 나타냄. 인스턴스 메서드(instance method)라고도 함. |
생성자 | 클래스로부터 객체를 생성할 때 호출되는 특별한 메서드. 객체의 초기화를 수행함. |
아래는 "cat" 클래스의 예제입니다
public class Cat {
// 멤버 변수(인스턴스 변수)
String name;
int age;
String color;
// 생성자(Constructor)
public Cat(String name, int age, String color) {
this.name = name;
this.age = age;
this.color = color;
}
// 메서드(Method)
public void meow() {
System.out.println("냐옹");
}
// Getter 메서드
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getColor() {
return color;
}
// Setter 메서드
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setColor(String color) {
this.color = color;
}
}
- 멤버 변수(인스턴스 변수): 객체의 특성을 나타내는 변수입니다. 이 클래스에서는 고양이의 이름, 나이, 색깔이며, 이 변수들은 객체가 생성될 때 초기화됩니다.
- 생성자(Constructor): 객체를 생성할 때 호출되는 메서드입니다. 이 클래스에서는 이름, 나이, 색깔을 인자로 받아 객체를 초기화합니다.
- 메서드(Method): 객체의 동작을 정의하는 메서드입니다. 이 클래스에서는 "냐옹" 소리를 내는 meow() 메서드가 있습니다.
- Getter 메서드: 멤버 변수의 값을 반환하는 메서드입니다. 이 클래스에서는 getName(), getAge(), getColor() 메서드가 있습니다.
- Setter 메서드: 멤버 변수의 값을 설정하는 메서드입니다. 이 클래스에서는 setName(), setAge(), setColor() 메서드가 있습니다.
위의 클래스를 사용하여 고양이 객체를 생성하고 속성을 설정할 수 있습니다.
Cat myCat = new Cat("나비", 3, "흰색");
위의 코드에서는 이름이 "나비"이고 나이가 3살이며 색깔이 흰색인 고양이 객체를 생성하고 있습니다.
위 코드는 "Cat" 클래스를 기반으로 "myCat"이라는 객체를 생성하는 것입니다. "new" 키워드를 사용하여 객체를 생성하며, "Cat()"은 "Cat" 클래스의 생성자를 호출하는 것입니다.
객체가 메모리에 저장될 때, 메모리 할당크킥는 클래스에 정의된 인스턴스 변수(instance variables)의 크기에 따라 결정됩니다.
"Cat" 클래스의 경우 "name", "age", "color"와 같은 인스턴스 변수를 가지고 있으므로, 객체가 메모리에 저장될 때 이러한 변수들의 크기만큼 공간이 할당됩니다.
따라서, "myCat" 객체는 "name", "age", "color"와 같은 인스턴스 변수를 저장할 수 있는 메모리 공간을 차지하게 됩니다.
각 인스턴스 변수에는 "myCat" 객체에 할당된 값을 저장합니다. 이러한 값들은 객체가 생성될 때 생성자를 통해 초기화될 수 있습니다. 저장된 값들은 객체가 존재하는 동안 계속 유지되며, 필요한 경우에는 getter와 setter 메소드를 통해 변경될 수 있습니다.
이제 이 객체의 속성을 변경하고 출력할 수 있으며, 메소드를 호출할 수도 있습니다.
myCat.setName("톰");
myCat.setAge(5);
myCat.setColor("검은색");
System.out.println("이름: " + myCat.getName());
System.out.println("나이: " + myCat.getAge());
System.out.println("색깔: " + myCat.getColor());
myCat.meow();
클래스와 객체, 인스턴스의 관계와 차이점
- 클래스(Class): 객체를 만들기 위한 설계도(Blueprint)를 말합니다. 클래스는 객체를 생성하기 위한 속성(Field)과 메서드(Method)를 정의합니다.
- 객체(Object): 속성과 동작을 가지는 실체(Entity)를 말합니다. 객체는 클래스의 인스턴스(Instance)이며, 자신만의 상태(State)와 행동(Behavior)을 가집니다.
- 인스턴스(Instance): 클래스를 기반으로 생성된 객체를 말합니다. 클래스에서 생성된 각각의 인스턴스는 고유한 상태(State)와 행동(Behavior)을 가지며, 객체의 특징을 표현합니다.
자바에서 객체(Object)와 인스턴스(Instance)는 서로 연관된 개념입니다. 객체는 <클래스의 인스턴스>라고도 표현할 수 있습니다. 객체는 클래스에서 정의된 속성과 메서드를 가지며, 인스턴스는 클래스로부터 생성된 객체를 의미합니다.
즉, 객체는 클래스에 대한 추상적인 개념을 나타내며, 인스턴스는 클래스로부터 생성된 구체적인 개념을 나타냅니다.
간단히 말해, 클래스는 객체를 만들기 위한 설계도라고 생각할 수 있습니다. 객체는 클래스에서 정의된 속성과 메서드를 가지는 실체를 의미하며, 인스턴스는 클래스로부터 생성된 객체를 나타냅니다.
클래스는 추상적인 개념이며, 객체와 인스턴스는 구체적인 개념입니다.
클래스를 사용하는 이유
자바에서 클래스를 사용하는 이유는 다음과 같습니다.
- 코드의 재사용성 : 클래스를 사용하면 유사한 기능을 하는 코드를 여러 곳에서 쉽게 재사용할 수 있습니다. 클래스를 이용하여 작성된 코드를 다른 프로그램에서도 활용할 수 있어 개발 시간을 단축시키고 코드의 일관성을 유지할 수 있습니다.
- 유지보수성의 향상 : 클래스를 사용하면 관련 있는 코드를 논리적으로 그룹화하여 구조적으로 정리할 수 있습니다. 이렇게 구조화된 코드는 유지보수가 쉬워집니다. 즉, 클래스를 사용하면 코드의 가독성과 유지보수성이 향상됩니다.
- 코드의 안정성 : 각 클래스는 자체적으로 캡슐화되어 있어 다른 클래스와 독립적으로 작동합니다. 클래스는 자신의 메서드와 속성만을 외부에서 접근할 수 있게 제한할 수 있기 때문에, 코드의 안정성이 향상됩니다.
클래스를 사용하는 상황(?)
자바에서 클래스는 다양한 상황에서 사용됩니다. 예를 들어, 다음과 같은 상황에서 클래스를 사용할 수 있습니다.
- 객체를 생성할 필요가 있는 경우 : 클래스는 객체를 생성하기 위한 템플릿 역할을 합니다. 따라서 객체를 생성해야 하는 경우 클래스를 사용합니다.
- 코드의 구조를 정리할 필요가 있는 경우 : 클래스를 사용하면 관련 있는 코드를 논리적으로 그룹화하여 구조적으로 정리할 수 있습니다. 이를 통해 코드의 가독성과 유지보수성이 향상됩니다.
- 코드의 재사용성을 높일 필요가 있는 경우 : 클래스를 사용하면 유사한 기능을 하는 코드를 여러 곳에서 쉽게 재사용할 수 있습니다. 이를 통해 개발 시간을 단축시키고 코드의 일관성을 유지할 수 있습니다.
https://www.tutorialspoint.com/java/java_object_classes.htm
https://docs.oracle.com/javase/tutorial/java/concepts/index.html
https://docs.oracle.com/javase/tutorial/java/concepts/class.html
'Java' 카테고리의 다른 글
[ 자바 / Java ] 생성자 (0) | 2023.03.06 |
---|---|
[자바 / Java] 멤버변수와 클래스변수, 지역변수 (0) | 2023.03.06 |
[ 자바 / Java ] 얕은복사 vs 깊은복사 (shallow copy /deep copy) 배열 (part2) (0) | 2023.03.06 |
[JAVA / 자바] 배열 (part1) (1) | 2023.02.26 |
[JAVA / 자바] API vs Library: API와 Library의 차이 (1) | 2023.02.21 |