eterno

JAVA 17일차. 자료구조와 Array List 본문

JAVA/강의노트

JAVA 17일차. 자료구조와 Array List

영원한별똥별 2022. 8. 25. 11:51
728x90
반응형

 

자료구조(data structure)

: 자료를 담는 구조(형식)
 - 데이터는 문자로 이루어져있고 그 데이터를 담는 구조를 자료구조라고 한다.

 

배열의 특징

  • 객체 배열이다. ( 참조 자료형을 쓰고 new키워드로 메모리에 올림)
  • 인덱스(데이터 가르키는 순서)가 있다.
  • DataType가 동일 해야 한다. ( ex) int[] = new int[4]);
  • Data의 길이(length)가 정해져 있다.
  •  

자바 컬렉션 프레임워크(Java Collection Framework)

: 자바로 프로그래밍 할 때 필요한 자료구조를 미리 구현하여 java.util.* 패키지에다가 제공하는 것

  • java.util.* 패키지는 자바의 자료구조이다.

 - ArrayList, HashMap 등등 여러 인터페이스가 정의되어 있다.


Array List

: 객체배열을 구현한 클래스(객체 순서를 기반으로 순차적으로 자료를 관리하는 프로그램을 구현할때 사용)

Array List 특징

      • 객체배열이다.
      • 인덱스를 갖고 순서와 순차적으로 구현된다.
      • 데이터 타입 에 있어서 자유롭다(데이터 타입이 달라도 된다.
         - 데이터를 입력할 때는 자료형 상관없이 쓸 수 있자만 출력할 때는 형에 맞춰서 출력해 줘야한다.(캐스팅해야한다)
      • 데이터 길이가 제한이 없다.
         * ArrayList()는 기본적으로 10개의 공간을 만들어주고 만약 11개를 입력하면 추가로 10개의 공간을 만들어 준다.

        * ArrayList를 사용하는 이유는 데이터를 담기 위해서이다.

 

ex) String so = "abc"; //”abc”문자열을 변수 so로 선언

aList.add(so); //ArrayList클래스에 so객체 추가

Object o = aList.get(0); //so는 String형인데 get()메소드로인해 Object로 형변환됨

String os = (String)o; // String으로 사용하기 위해서는 형변환을 해야한다.

 

ArrayList클래스의 주요 메소드

add(): 객체 추가(배열의 길이와 상관없이 추가 가능)

size() : 길이를 구하는 함수( ≠ length() )

get() : 값을 반환

 

기본형식

ArrayList<E> 배열이름 = new ArrayList<E>();
* E는 자료형을 의미한다

예제)

예제) 3개짜리 공간을 만들고 4번째 데이터를 입력해도 ArrayList에서는 입력 가능하다.

ArrayList함수에서 사용되는 변수는 get으로 호출되는데 get()함수의 리턴형은 Object이다. ( public Object get(int index))

따라서 콘솔에 출력하기 위해서는 형변환을 해야한다.

 

형변환 방법1

Object aList_Object = aList.get(0);

String aList_String = (String)aList_Object;

System.out.println("aList_String >>> : " + aList_String); 

 

형변환 방법2

String sV = String.valueOf(aList_Object); System.out.println("sV >>> : " + sV);


제너릭(Generic)

: 어떤 값이 하나의 참조 자료형이 아닌 여러 참조 자료형을 사용 할 수 있도록 프로그래밍하는 것

  • jdk 1.5에서 처음 등장하였다.
  • < > 안에 자료형을 입력하면 < > 안에 있는 자료형만 입력할 수 있다.
    • <T> Type : 클래스타입
    • <E> Element : Object
    • <K> Key : key = value의 key
    • <V> Value : key = value 의 value
    • <N> Number : 숫자
    • <?> 와일드카드 : 클래스타입을 정하지 않고 사용할 때

 

 

TestMemberVO 클래스

package a.b.c.ch5;

public class TestMemberVO {
	
	// information hiding, encapsulation 정보은닉
	private String name;
	private String email;
	private String hp;
	private String addr;

	public TestMemberVO() {
	
	}

	public TestMemberVO(String name, String email, String hp, String addr) {
		
		this.name = name;
		this.email = email;
		this.hp = hp;
		this.addr = addr;
	}

	// get + N + ame (get + name)
	public String getName() {
		return name;
	}

	// set + N + ame (set + name)
	public void setName(String name) {
		this.name = name;
	}

	public String getEmail() {
		return email;
	}

	public String getHp() {
		return hp;
	}

	public String getAddr() {
		return addr;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public void setHp(String hp) {
		this.hp = hp;
	}

	public void setAddr(String addr) {
		this.addr = addr;
	}
	
}

예제)아래의 TestMemberVO 클래스를 호출하여 출력하기

package a.b.c.ch6;

import java.util.ArrayList;

public class TestMember_5 {

	public ArrayList<TestMemberVO> testMember(TestMemberVO tvo) {
		System.out.println("TestMember_5.testMember() 함수 >>> : ");
		System.out.println("testMember() >>> : tvo " + tvo);
		
		System.out.println("tvo.getName() >>> : " + tvo.getName());
		System.out.println("tvo.getemail() >>> : " + tvo.getEmail());
		System.out.println("tvo.gethp() >>> : " + tvo.getHp());
		System.out.println("tvo.getaddr() >>> : " + tvo.getAddr());
		
		//인스턴스
		ArrayList<TestMemberVO> aList = new ArrayList<TestMemberVO>();
		System.out.println("testMember() >>> : aList " + aList);
		aList.add(tvo);
		System.out.println("testMember() >>> : aList " + aList);
		return aList;
	}

	public static void main(String[] args) {
		// 지역변수 초기화
		String name = "홍길동";
		String email = "abcfje@naver.com";
		String hp = "010-1234-5678";
		String addr = "서울시 강남구";
		
		TestMemberVO tvo = null;
		tvo = new TestMemberVO(); 
		tvo.setName(name); 
		tvo.setEmail(email);
		tvo.setHp(hp);
		tvo.setAddr(addr);

		TestMember_5 tm_5 = new TestMember_5();
		ArrayList<TestMemberVO> aList = tm_5.testMember(tvo);
		
		System.out.println("\nTestMember_5.main() for 문 >>> : \n");		
		for(int i = 0; i < aList.size(); i++) {
			
			System.out.println("main() >>> : aList " + aList);
			
			TestMemberVO _tvo = aList.get(i);
			System.out.println("main() >>> : _tvo " + _tvo);
			
			System.out.println(_tvo.getName() + " ");
			System.out.println(_tvo.getEmail() + " ");
			System.out.println(_tvo.getHp() + " ");
			System.out.println(_tvo.getAddr());			
		}		
	}
}

결과 > 

TestMember_5.testMember() 함수 >>> : 
testMember() >>> : tvo a.b.c.ch6.TestMemberVO@15db9742
tvo.getName() >>> : 홍길동
tvo.getemail() >>> : abcfje@naver.com
tvo.gethp() >>> : 010-1234-5678
tvo.getaddr() >>> : 서울시 강남구
testMember() >>> : aList []
testMember() >>> : aList [a.b.c.ch6.TestMemberVO@15db9742]

TestMember_5.main() for 문 >>> : 

main() >>> : aList [a.b.c.ch6.TestMemberVO@15db9742]
main() >>> : _tvo a.b.c.ch6.TestMemberVO@15db9742
홍길동 
abcfje@naver.com 
010-1234-5678 
서울시 강남구

예제) TestMemberVO를 호출하여 출력

package a.b.c.ch6;

import java.util.ArrayList;

public class TestMember_6 {
	// selectMember 함수에 자료형이 TestMemberVO인 매개변수 aList
	public void selectMember(ArrayList<TestMemberVO> aList) {
		System.out.println("TestMember_6.testMember() 함수 >>> : \n");

		for(int i = 0; i< aList.size(); i++)
		{
			TestMemberVO tvo = aList.get(i);
			
			System.out.println(tvo.getName() + ",");
			System.out.println(tvo.getEmail() + ",");
			System.out.println(tvo.getHp() + ",");
			System.out.println(tvo.getAddr());			
		}
	}		

	public static void main(String[] args) {
		// 지역변수 초기화
		String name = "홍길동";
		String email = "abcfje@naver.com";
		String hp = "010-1234-5678";
		String addr = "서울시 강남구";
		
		ArrayList<TestMemberVO> aList = new ArrayList<TestMemberVO>();
		
		for(int i = 0; i<10;i++) {
			TestMemberVO tvo = new TestMemberVO();
			tvo.setName(name + i);
			tvo.setEmail(email + i);
			tvo.setHp(hp + i);
			tvo.setAddr(addr + i);
			
			aList.add(tvo);
		}
		
		TestMember_6 tm_6 = new TestMember_6();
		tm_6.selectMember(aList);	
			
		}
		
	}
    
결과>
    
    TestMember_6.testMember() 함수 >>> : 

홍길동0,
abcfje@naver.com0,
010-1234-56780,
서울시 강남구0
홍길동1,
abcfje@naver.com1,
010-1234-56781,
서울시 강남구1
홍길동2,
abcfje@naver.com2,
010-1234-56782,
서울시 강남구2

... 

홍길동8,
abcfje@naver.com8,
010-1234-56788,
서울시 강남구8
홍길동9,
abcfje@naver.com9,
010-1234-56789,
서울시 강남구9

 

자료구조(data Structure) 정리

Array(배열) ArrayList(리스트)
객체 객체
Index Index
Data type동일해야함 Data type 동일하지 않아도 됨
-> 대신 출력할때는 형변환 해야함
 - <제너릭> 사용
길이제한 있음(<length()) 길이제한 없음(기본 10)

 

728x90
반응형