일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- JSP
- 객체
- 백준 알고리즘
- 자동 형변환
- lang package
- 암호론
- HTML
- 2884
- 현대암호
- BufferedWrite
- 소수판정
- 클래스 패스
- LANG
- 디렉티브
- java
- 공개키 암호
- 자료구조
- 알고리즘
- 백준
- 객체지향
- 예외처리
- bubble-sort
- class
- 프로그래밍
- try&catch
- 재귀호출기본
- jvm
- 형변환 연산자
- 연결된 예외
- OOP
- Today
- Total
코드일기장
Java_객체배열과 클래스의 정의(객체지향 1-3) 본문
💻 객체 배열과 클래스의 정의
이번 시간은 객체 배열과 클래스의 정의에 대해 포스팅을 해보겠다.
⚡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 링크
'Java > OOP' 카테고리의 다른 글
[Java] 호출 스택, 매개변수 (객체지향 1-6) (0) | 2022.01.04 |
---|---|
[Java] 메서드와 return(객체지향 1-5) (0) | 2021.12.29 |
[Java] 변수의 종류와 클래스 변수 인스턴스 변수(객체지향 1-4) (0) | 2021.12.28 |
Java_객체의 생성과 사용법 (객체지향 1-2) (0) | 2021.12.20 |
Java_ 객체지향개념(객체지향 1-1) (0) | 2021.12.18 |