코드일기장

Java_객체배열과 클래스의 정의(객체지향 1-3) 본문

Java/OOP

Java_객체배열과 클래스의 정의(객체지향 1-3)

won_hyeok2 2021. 12. 23. 20:53

💻 객체 배열과 클래스의 정의

 

 

이번 시간은 객체 배열과 클래스의 정의에 대해 포스팅을 해보겠다.

 

 


⚡1. 객체배열

 

객체 역시 배열로 다루는 것이 가능하다 이것을 '객체배열'이라고 한다.

 

객체 배열 안에 객체가 저장되는 것은 아니고, 객체의 주소가 저장된다.

 

TestClass tc1,tc2,tc3;
tc1=new TestClass();
tc2=new TestClass();
//객체배열을 사용하면
TestClass[] tcarr=new TestClass[3]; 
tcarr[0]=new TestClass();
tcarr[1]=new TestClass();
tcarr[2]=new TestClass();

맨 위줄 코드는 TestClass tc1, tc2, tc3 3개의 참조변수 선언 후 인스턴스화를 했다. 만약 참조변수 100이라면 더 긴 코드가 나올 것이다.

 

 

주석 아래 코드는 객체배열 코드이다. 참조 변수들을 하나로 묶은 참조변수 배열이다, (객체배열==참조변수배열)

코드를 더 자세히 알아보자

 

TestClass[] tcarr=new TestClass[3];

이 코드는 참조변수들이 만들어진 것뿐이다. 아직 객체가 생성되지 않았다.

tcarr[0]=new TestClass();
tcarr[1]=new TestClass();
tcarr[2]=new TestClass();

index당 인스턴스화를 해야 객체가 생성되었다고 볼 수 있다.

 


객체배열 인스턴스화를 쉽게 하는 방법이 없을까? 당연히 있다.

 

TestClass[] tcarr= {new TestClass(),new TestClass(),new TestClass()};

배열의 초기화 블럭을 쓴다면 위 코드처럼 하드코딩 없이 손쉽게 인스턴스화 할 수 있다. 

한 줄로 간단히 작성 가능.

 

 

TestClass[] tcarr1=new TestClass[3];
tcarr1[0]=new TestClass();
tcarr1[1]=new TestClass();
tcarr1[2]=new TestClass();
//상단은 객체배열 생성 후 index별로 인스턴스화 객체 생성
//하단은 초기화블럭 사용
TestClass[] tcarr2= {new TestClass(),new TestClass(),new TestClass()};

객체배열은 주석을 기준으로 상단 혹은 하단의 방식으로 사용하면 된다.

 

 

 

만약, 객체배열의 길이가 100이면 어떻게 객체화를 시킬 것인가? 초기화 블록을 이용해도 하드코딩이 되는 것 이다.

그럴 땐 for문을 사용하면 된다.

TestClass[] tcarr=new TestClass[100];
	for(int i=0;i<tcarr.length;i++) {
		tcarr[i]=new TestClass();
	}

 

 

🔥객체배열의 정리

  • 객체 배열은 배열을 생성한 후 (참조 변수들을 생성) 무조건 객체를 생성해야 한다는 점을 잘 알아두자.

 

 


 

⚡2. 클래스의 정의

 

 

클래스의 정의(1)는 데이터와 함수의 결합이라고 볼 수 있다.

 

 

1. 변수       하나의 데이터를 저장할 수 있는 공간

2. 배열       같은 종류의 여러 데이터를 하나의 집합으로 저장할 수 있는 공간

3. 구조체    서로 관련된 여러 데이터를 종류에 관계없이 하나의 집합으로 저장할 수 있는 공간

4. 클래스    데이터와 함수의 결합(구조체+함수)

 

구조체는 Java에서는 배우지 못했을 것이다. 보통 C언어에서 배우는 문법이다. 배열은 int형만 저장할 수 있었다면 구조체는 타입 상관없이 여러 데이터를 저장할 수 있는 것이다.

구조체에서 발전한 게 클래스라고 볼 수 있다.

 

 

 


 

또 다른 클래스의 정의(2)는 사용자 정의 타입이라 볼 수 있다.

 

Java에서 제공하지 않는 클래스를 다루어야 할 때가 있을 것이다. 개발자의 입맛과 상황에 맞게 클래스를 작성해야 할 때가 분명 있을 것이다. 

이때, 비객체지향적 코드를 사용하게 되면 하드코딩이다. 유지보수도 힘들고 클린 하지 못하다.

객체지향적 코드를 사용한다면 유지보수와 클린 코드가 가능한 것이다.

 

 

예를 위해 비객체지향적 코드와 객체지향적 코드를 대충 만들어보았다.

 

class Main{
	public static void main(String args[]) throws IOException{
		float point=0.0f;
		int price=0;
		
		Buy("TV");
		Buy("Phone");
		Buy("Radio");
	}
	static void Buy(String s){
		if(s=="TV") {
			float f=500/100;
			System.out.println("적립포인트는"+f+"입니다.");
		}else if(s=="Phone"){
			float f=100/100;
			System.out.println("적립포인트는"+f+"입니다.");
		}else {
			System.out.print("구매하실 제품은 없습니다.");
		}
	}
	
}

 


 

class Main{
	public static void main(String args[]) throws IOException{
		TestClass tc=new TestClass();
		tc.Buy("TV");
		tc.Buy("Phone");
		tc.Buy("??");
	}

}
class TestClass{
	float pointC=0f;
	int priceC=0;
	
	void Buy(String s) {
		if(s=="TV") {
			float f=500/100;
			System.out.println("적립포인트는"+f+"입니다.");
		}else if(s=="Phone"){
			float f=100/100;
			System.out.println("적립포인트는"+f+"입니다.");
		}else {
			System.out.print("구매하실 제품은 없습니다.");
		}
	}
}

 

main메서드 블럭기준 위에 코드는 비객체지향적코드라고 볼 수 있다. 

아래 코드는 위에 코드보다 유지보수가 편하며 기능 추가하기에 용이하다.

 

변수와 배열 함수들이 많아진다면 class 없이는 상상만 해도 힘든 개발이 될 것이다. 

배열 또 한 앞에 배운 객체 배열로 class에서 다루면 되는 것이다.

 


 

📌결론

클래스의 정의는 
데이터와 함수의 결합 (저장소)
사용자 정의 타입이다.

 

 

 

 


🎈다음 글 보기 (객체지향 1-3)


 

 


🚀 Java 객체지향 1-2 링크


 

 

 

Comments