Welcome to Wesley & Harry's Traveling & Programming

IT Program/Java Basic

자바(java) 객체지향의 특징 & 클래스, 객체, 인스턴스

Wesley & Harry 2022. 3. 6. 19:07
반응형

지금까지의 포스팅에선 자바의 기본적인 실습위주의 사용법에 대해 알아보았습니다.

이제부터는 자바의 특징과 다양한 이름, 조금은 어려운 개념에 대해 이야기 해보고자 합니다.

 

자바의 특성 및 객체지향

우선 자바의 특성 및 객체지향에 대해 알아보겠습니다.

객체지향이론의 기본은 '실제 세계는 사물로 이루어져 있으며, 발생하는 모든 사건들은 사물간의 상호작용이다'라고 한다. 실제 사물의 속성과 기능을 분석한 다음, 데이터와 함수로 정의함으로써 실제 세계를 컴퓨터 속에 옮겨 놓은 것과 같은 가상세계를 구현하고 이 가상세계에서 모의실험을 함으로써 많은 시간과 비용을 절약할 수 있게되었습니다.

객체지향이론은 상속, 캡슐화, 추상화 개념을 중심으로 점차 구체적으로 발전되었습니다.

자바의 특성을 알아보겠습니다.

  • 상속, 캡슐화, 추상화, 다형성 개념을 중심으로 점차 구제적으로 발전된 언어
  • 캡슐화 - 데이터와 코드의 형태를 외부에서 알 수 없고, 데이터의 구조와 역활, 기능을 캡슐형태로 만드는 방법
  • 상속 - 상위 클래스의 모든걸 하위 클래스가 이어받는것. 부모 -자식
  • 다형성 - 상속과 연관이 있는 개념으로 한 객체가 다른 여러형태로 재구성되는것.
  • 추상화 - 객체의 공통적 속성과 기능을 추출하여 정의하는것.
  • 코드의 재사용성이 높다.
  • 코드의 관리가 용이하다.
  • 신뢰성이 높은 프로그래밍 가능케한다.

객체지향의 이러한 장점이 프로그램개발과 유지보수에 드는 시간과 비용을 개선해주었습니다.

하지만 처음 자바를 시작할 경우 코드의 개선을 신경쓰기란 쉽지 않다. 기능을 위주로 코드를 작성한 후 '코드를 어떻게 개선할 것이가'에 대해 생각해보아야겠습니다.


해당 캡슐화, 상속, 다형성, 추상화에 대한 설명은 추후 포스팅을 통해 게시하도록 하겠습니다.


클래스, 객체, 인스턴스

지금까지 자바를 이용하며 클래스와 객체에 대한 말에 궁금증을 가지셨을겁니다.

오늘은 클래스의 정의, 객체의 정의를 코드와 함께 배워보도록 하겠습니다.

 

클래스란 '객체를 정의해놓은 것', '객체의 설계도 또는 틀'이라고 정의할 수 있습니다.

클래스는 객체를 생성하는데 사용되며, 객체는 클래스에 정의된 대로 생성되게됩니다.

 

객체란 '실제로 존재하는 것', '사물', '개념'을 뜻합니다.

객체는 클래스에 정의된 내용대로 메모리에 생성된 것을 뜻하게 됩니다.

 

클래스와 객체에 대해 간단하게 설명해보도록 하겠습니다.

우리는 핸드폰설계도(클래스)와 핸드폰(객체)를 예로 들 수 있습니다.

핸드폰설계도(클래스)는 핸드폰(객체)을 만들기 위해 사용될 뿐입니다.

또한 저희가 핸드폰(객체)을 쓰기 위해서는 핸드폰설계도(클래스)가 필요한것은 아닐겁니다.

하지만 핸드폰설계도(클래스)를 이용해 핸드폰(객체)을 만들어야 핸드폰을 사용할 수 있습니다.

이 말을 정리하자면 클래스를 생성하고 객체를 만들어야 객체를 사용할 수 있다는 말과 같습니다.

또한, 클래스를 잘 만들어둔다면 매번 어떻게 객체를 생성할지 고민할 필요없이 클래스로부터 객체를 생성해서 사용하기만 하면됩니다.

 

또한 JDK는 수많은 클래스를 기본적으로 제공하고 있습니다.

해당 클래스를 확인하는 방법은 Ctrl + 클릭을 통해 볼 수 있습니다.

만약 Ctrl + 클릭이 안먹힌다면 아래 링크를 참조해주시기 바랍니다.

2022.03.06 - [IT Program/Java Basic] - 이클립스 클래스(class)파일 보는법, 여는법 (Ctrl + 클릭)(에러 해결법)

 

이클립스 클래스(class)파일 보는법, 여는법 (Ctrl + 클릭)(에러 해결법)

기본적으로 JDK에 들어있는 class 파일을 보기 위해선 보고싶은 부분을 Ctrl + 클릭을 통해 열어볼 수 있습니다. 하지만 오류인지 뭐인지 class not found 등의 문구가 뜨면서 안나올 때가 있습니다. 오

dongwoonew.tistory.com

 


객체, 인스턴스화, 인스턴스

인스턴스화란 클래스로부터 객체를 만드는 과정을 말합니다.

어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스라고 합니다.

위의 예를 가져와보자면 핸드폰설계도(클래스)로부터 만들어진 객체를 핸드폰설계도 클래스의 인스턴스라고 합니다.

인스턴스는 객체와 같은 의미이지만

객체는 모든 인스턴스를 대표하는 포괄적 의미를 가지고있습니다.

인스턴스는 어떤 클래스로부터 만들어진 것인지를 강조하는 구체적인 의미를 갖고있습니다.


객체의 구성요소

객체는 속성과 기능 두종류의 구성요소로 이루어져있습니다.

또한, 객체가 가지고 있는 속성과 기능을 객체의 멤버라고 합니다.

아래 코드를 참조해봅시다.

package wesley.java.practice.basic;

public class handPhone {
	String color;//속성
	boolean power;//속성
	int sound;//속성
	
	void power() {
		power = !power;
	}//기능
	void soundUp() {
		sound++;
	}//기능
	void soundDown() {
		sound--;
	}//기능

}//end class

해당 코드는 핸드폰을 끄고 키고, 사운드를 높이고 줄이는 코드입니다.

주석을 달아놓은것처럼 위에 변수를 선언하는 건 객체의 속성부분에 해당하고

메서드는 기능부분에 해당하게 됩니다.


인스턴스

handPhone클래스를 선언한 것은 handPhone설계도를 작성한것이다.

handPhone 인스턴스를 생성해야 handPhone을 사용할 수 있다. 

코드를 통해 알아보도록 하자.

package wesley.java.practice.basic;

class handPhone {
	String color;//색깔
	boolean power;//전원
	int sound;//볼륨
	
	void power() { power = !power; } // 전원 키고끄는 메소드
	void soundUp() { sound++; }// 소리를 키우는 메소드
	void soundDown() { sound--; }// 소리 줄이는 메소드

}

class handPhoneInstance{
	public static void main(String[] args) {
		handPhone h;
		h = new handPhone();
		h.sound = 10;
		h.soundUp();
		System.out.println("핸드폰 볼륨은 " + h.sound + "입니다.");
	}
}

코드를 살펴보도록 하겠습니다.

handPhone클래스에서 인스턴스를 생성하고, 인스턴스의 속성과 메서드를 사용하였다.

우선 handPhoneInstance 클래스에 대해 보도록 하겠습니다.

 

handPhone h;

handPhone 타입의 참조변수 h를 선언합니다.

 

h = new handPhone();

new 연산자를 통해 heap 영역에 handPhone클래스의 인스턴스가 빈영역에 생성됩니다.

color, power, sound 는 default값으로 초기화가 됩니다. String은 참조형 변수이므로 null값이 들어갑니다.

해당 변수들을 멤버변수라고 합니다.

'=' 연산자를 통해 생성된 객체의 주소값이 참조변수 h에 저장이 됩니다. h에 의해 handPhone인스턴스에 접근할 수 있습니다. 

 

h.sound = 10;

참조변수 h에 저장된 주소에 있는 인스턴스의 멤버변수 sound에 10을 저장합니다.

인스턴스의 멤버변수를 사용하기 위해선

참조변수.멤버변수 라고 칭하면 사용이 가능합니다.

 

h.soundUp();

참조변수 h에 저장된 주소에 있는 soundUp() 메소드를 실행합니다.

sound++을 통해 멤버변수 sound의 값을 1 증가시킵니다.

 

System.out.println("핸드폰 볼륨은 " + h.sound + "입니다.");

참조변수 h가 참조하고있는 handPhone인스턴스의 멤버변수 sound를 출력합니다.

결과가 맞게 나오는것을 확인할 수 있습니다.

인스턴스는 참조변수를 통해서 사용가능하며, 참조변수의 타입은 인스턴스의 타입과 동일해야합니다.

이로써 객체, 인스턴스, 클래스를 알아보았습니다.

반응형