📍 클래스와 객체의 관계
0. 객체지향언어
- 함수들을 한 덩어리의 객체로 묶습니다.
- 객체들 간의 상호작용으로 문제를 해결하여 프로그램을 더욱 명확하고 쉽게 만들 수 있습니다.
1. 객체란?
- 정의 : 현실세계의 사물 또는 대상을 모방한 프로그램상의 object를 가리킵니다.
- 객체가 갖는 데이터와 제공하는 기능을 통해 상호작용을 합니다.
2. 클래스와 객체
클래스가 붕어빵을 만드는 틀이라면 객체는 붕어빵 틀을 통해 만들어진 붕어빵이다.
클래스
- 클래스로부터 생성될 객체들의 공통된 속서오가 행위를 추상적으로 표현한여 정의합니다.
- 클래스의 구성 요소 : 멤버 필드(속성) & 메서드
- 멤버 필드 : 변수 혹은 상수 선언문으로 필요시 초기화가 가능합니다.
- 메서드 : 메서드의 body를 구현합니다.
객체
- 객체의 구성 요소 : 속성 & 행위
- 속성 : 객체의 특성을 표현하며 정적인 성질입니다.
- 행위 : 객체 내부에서 처리할 일이나 객체들간에 영향을 주고 받는 일입니다. 동적인 일을 처리하는 단위입니다.
- 같은 종류의 객체의 공통된 '데이터 구조'와 '기능'을 따로 뽑아 하나의 클래스로 정의합니다.
⭐ 클래스와 객체의 차이점
클래스는 객체를 만들기 위한 '틀'로 객체가 지니는 '속성'과 '행위'를 추상적으로 정의합니다.
객체는 구체적인 한 instance로 속성에는 고유한 값을 지니며 동일한 행위를 행합니다.
3. 동적 메모리 할당
클래스의 구조
[접근제한][클래스종류] class <클래스이름>
멤버 필드
- instance 멤버 필드 : 각 객체 생성시 별도의 메모리 할당을 합니다.
- 멤버 변수의 경우 각 객체마다 고유의 속성값 저장이 가능합니다.
- static 멤버 필드 : 프로그램 시작시 메모리를 할당합니다.
- 객체의 수와 상관없이 단 하나만 생성하며 모든 객체들이 공유합니다.
- ex) static final double PI=3.14;
⭐ 동적 메모리 할당
class Circle{
double radius;
double area(){
return radius*radius*3.14;
}
}
Circle c1= new Circle();
double c1.radius=10;
double area=c1.area();
위의 코드를 통해 알 수 있는 점은 다음과 같습니다.
- new 연산자를 사용하여 동적 할당될 필요 크기를 자동으로 계산합니다.
- 동적 할당된 영역에 대한 정보는 참조변수에 할당됩니다.
- 참조자료형이란 동적 할당된 영역에 대한 참조값(메모리 주소)을 갖는 일종의 포인터 변수와 비슷합니다.
- c1은 참조변수로 객체에 대한 참조값을 갖습니다.
- 객체에 접근하는 유일한 통로로 c1을 객체로도 부릅니다.
📍 멤버와 메서드
0. 메서드 오버로딩
- 정의 : 하나의 클래스 내에서 같은 이름을 가진 메서드가 여러 개 정의될 수 있습니다.
- 구조 : [접근제한] <클래스명> ([매개변수])
- ex) public FruitSeller(int numOfApple, int money)
1. this 참조변수
- 정의 : 메서드 호출 시, 메서드 자신을 호출한 객체에 대한 참조값을 받는 변수입니다.
- 그 자신의 다른 멤버들을 조작하고자 할 때 사용됩니다.
public class FruitSeller {
static final int APPLE_UNIT_COST=1000;
int numOfApple;
int money;
public FruitSeller(int numOfApple, int money){
this.numOfApple=numOfApple;
this.money=money;
}
public FruitSeller(int numOfApple) {
this(numOfApple,0);
}
위의 코드에서 알 수 있는 점은 다음과 같습니다.
- this.멤버 변수=매개 변수
인자로 받은 numOfApple과 멤버 변수인 numOfApple과 구분짓기 위하여 멤버 변수 앞에 this를 붙여줍니다.
public FruitSeller(int numOfApple, int money){
this.numOfApple=numOfApple;
this.money=money;
}
- this(매개변수,0)
인자를 1개만 받고 다른 매개변수에는 초기화 값을 설정하고 싶을 때 this(매개변수와 초기화하고 싶은 값)을 작성해줍니다.
public FruitSeller(int numOfApple) {
this(numOfApple,0);
}
2. 정적 멤버
- 클래스명.정적멤버
- 정적 멤버(=static 멤버)를 다른 클래스에서 접근 할 때 클래스명.정적 멤버로 작성해줍니다.
- ex) Circle.PI
class Circle{
static final double PI=3.14;
}
Circle.PI;