[JAVA] 클래스와 객체 & 멤버

kbannie·2022년 9월 30일
0

JAVA

목록 보기
3/8
post-thumbnail

📍 클래스와 객체의 관계

0. 객체지향언어

  • 함수들을 한 덩어리의 객체로 묶습니다.
  • 객체들 간의 상호작용으로 문제를 해결하여 프로그램을 더욱 명확하고 쉽게 만들 수 있습니다.

1. 객체란?

  • 정의 : 현실세계의 사물 또는 대상을 모방한 프로그램상의 object를 가리킵니다.
  • 객체가 갖는 데이터와 제공하는 기능을 통해 상호작용을 합니다.

2. 클래스와 객체

클래스가 붕어빵을 만드는 틀이라면 객체는 붕어빵 틀을 통해 만들어진 붕어빵이다.

클래스

  • 클래스로부터 생성될 객체들의 공통된 속서오가 행위를 추상적으로 표현한여 정의합니다.
    • 클래스 정의는 단지 틀(껍데기)입니다.
  • 클래스의 구성 요소 : 멤버 필드(속성) & 메서드
    • 멤버 필드 : 변수 혹은 상수 선언문으로 필요시 초기화가 가능합니다.
    • 메서드 : 메서드의 body를 구현합니다.

객체

  • 객체의 구성 요소 : 속성 & 행위
    • 속성 : 객체의 특성을 표현하며 정적인 성질입니다.
    • 행위 : 객체 내부에서 처리할 일이나 객체들간에 영향을 주고 받는 일입니다. 동적인 일을 처리하는 단위입니다.
  • 같은 종류의 객체의 공통된 '데이터 구조'와 '기능'을 따로 뽑아 하나의 클래스로 정의합니다.

⭐ 클래스와 객체의 차이점

클래스는 객체를 만들기 위한 '틀'로 객체가 지니는 '속성'과 '행위'를 추상적으로 정의합니다.
객체는 구체적인 한 instance로 속성에는 고유한 값을 지니며 동일한 행위를 행합니다.

3. 동적 메모리 할당

클래스의 구조

[접근제한][클래스종류] class <클래스이름>

멤버 필드

  • instance 멤버 필드 : 각 객체 생성시 별도의 메모리 할당을 합니다.
    • 멤버 변수의 경우 각 객체마다 고유의 속성값 저장이 가능합니다.
  • static 멤버 필드 : 프로그램 시작시 메모리를 할당합니다.
    • 객체의 수와 상관없이 단 하나만 생성하며 모든 객체들이 공유합니다.
    • ex) static final double PI=3.14;

⭐ 동적 메모리 할당

//Circle 클래스 정의
class Circle{
	double radius;
   	double area(){
    	return radius*radius*3.14;
    }
}

//c1 객체 생성
Circle c1= new Circle();  //참조 변수 선언 및 객체 생성
double c1.radius=10;      //instance 멤버 변수 접근
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);
	}  //오버로딩을 통해서 초기화 사과 개수를 매개변수로 전달 받음. 
	   //돈은 항상 0원으로 초기화 한다면 리터럴 정수 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
//Circle 클래스
class Circle{
	static final double PI=3.14;
}

//객체 생성 후 정적 멤버에 접근할 때
Circle.PI;
profile
여행하는 데이터 사이언티스트🧙‍♂️

0개의 댓글

관련 채용 정보