ArrayList - 제네릭( Generic )

 

제네릭(Generic)

:클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법으로 타입을 명시하여 배열과 같은 효과가있다.

만약 사용 목적이 확실하다면 제네릭을 사용하여 불필요한 코드(형 변환)를 줄일 수 있으며 

컬렉션 뒤에 ex) Vector<String>vc = new Vector<>();으로 타입을 명시하여준다. 

 

다음은 ArrayList를 String 타입으로 선언한 코드이다.

public class ArrayListEx {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ArrayList<String>list = new ArrayList<>();
		
		list.add("JAVA");
		list.add("JDBC");
		list.add("Servlet/JSP");
		list.add(2, "Database");
		list.add("MYBATIS");
		
		int size = list.size();
		System.out.println("총 객체 수 : " + size);
		System.out.println("요소 출력 : " + list.get(2));
		System.out.println();
		
		//반복문으로 요소 출력
		for(int i=0; i<list.size(); i++) {
			String str = list.get(i);
			System.out.println(i + ":" + str);
		}
		
		//요소 삭제-삭제된 공간 당겨짐!
		System.out.println();
		list.remove(2);
		String skill = list.get(2);
		System.out.println("2 : " + skill);
		
		list.remove(2);
		skill = list.get(2);
		System.out.println("2 : " + skill);
		System.out.println();
		list.remove("MYBATIS");
		
		for(int i=0; i<list.size(); i++) {
			String str = list.get(i);
			System.out.println(i + ":" + str);
		}
		
	}

}

ArrayList도 마찬가지로 add와 get, remove로 객체를 저장, 추출, 삭제할 수 있다.

 

마찬가지로 삭제된 공간은 당겨진다!

'JAVA' 카테고리의 다른 글

[JAVA] Exception - 예외 처리(1)  (0) 2020.09.24
[JAVA] Random 클래스 - 가위바위보, 로또 번호 생성기  (0) 2020.09.24
[JAVA] 콜렉션-Collection  (0) 2020.09.22
[JAVA] Wrapper클래스  (0) 2020.09.22
[JAVA] GUI 스크롤바(RGB)  (0) 2020.09.20

자바에서 collection은 객체를 담을 수 있는 기억장소로서 여러가지 자료를 적절한 형태로 처리하고

저장하는 저장형태(묶음)의 자료구조를 말한다.

 

<콜렉션과 배열의 차이점>

 

-리사이즈가 가능하다.

  :기본 사이즈를 10이라고 했을 때 공간이 초과하면 공간이 n개 씩 증가하고 늘어나는 n의 개수를 직접 지정가능함.  

 

-객체 중복이 허용된다.(배열과 마찬가지로 인덱스 개념을 사용함)

 

-배열 공간이 삭제되면 배열은 null이 되지만 콜렉션은 삭제된 공간만큼 당겨진다.(하지만 배열보다 속도가 느리다.)

 

 

<종류>

1.Vector

Vector vc = new Vector(); 
		//add-객체 저장
		vc.add("홍길동1"); 
		vc.add("홍길동2");
		vc.add("홍길동3");

		//get-객체 추출 (강제 형 변환)
		String str1 = (String)vc.get(0);  //vc.get(index); 
		String str2 = (String)vc.get(1);
		String str3 = (String)vc.get(2);
		
		//출력
		System.out.println(str1);
		System.out.println(str2);
		System.out.println(str3);
        
        //검색의 용도 - 몇 번째 인덱스에 있는지 확인
		int index = vc.indexOf(name);
		
		//name이라는 객체가 존재하는지 
		if(vc.contains(name)) {
			System.out.println("검색결과 있음 : " + vc.get(index)); //member.getName
			//회원 정보 삭제 - 리스트에 name이 존재하면 삭제
			if(vc.remove(name)) {
				System.out.println("삭제 완료!");
			}
		}
		//검색 결과를 오브젝트로 끌어내서 String으로 형 변환 후 출력
		System.out.println("<출력 결과 표현1>");
		for(int i=0; i<vc.size(); i++) {
			Object obj = vc.get(i);
			String str = (String)obj;
			System.out.println(str);
		}

add메소드로 객체를 저장하고 get메소드를 통해 저장한 객체를 추출한다. 객체로 저장된 홍길동1,2,3 들을 강제 형 변환을 해서 추출하여 출력하였다.

 

그 다음 remove메소드를 통해 저장한 객체를 삭제하였다.

콜렉션은 배열과 다르게 null이 되지 않고 삭제한 공간을 바로 뒤

에 있는 객체가 당겨진다.  

 

 

 

 

 

 

 

 

2. list

public class VectorEx2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		List list = new Vector();
		//객체 넣기(회원 가입)
		list.add(new Board("제목1: ", "내용1", "글쓴이1"));
		list.add(new Board("제목2: ", "내용2", "글쓴이2"));
		list.add(new Board("제목3: ", "내용3", "글쓴이3"));
		list.add(new Board("제목4: ", "내용4", "글쓴이4"));
		list.add(new Board("제목5: ", "내용5", "글쓴이5"));
		
		//회원 탈퇴
		list.remove(2);
		list.remove(3);
		for(int i=0; i<list.size();i++) {
			Object obj = list.get(i);
			Board board = (Board)obj;
			System.out.println(board.subject + "\t" + board.content + "\t" + board.writer);	
		}
	}
}

list형태도 마찬가지로 add로 객체를 저장하고 

remove를 통해 삭제할 수 있다.

list형태를 이용해 회원 가입 시스템의 회원 가입과 회원 탈퇴 기능 구현이 가능하다. 

 

 

 

 

'JAVA' 카테고리의 다른 글

[JAVA] Random 클래스 - 가위바위보, 로또 번호 생성기  (0) 2020.09.24
[JAVA] 콜렉션 (Collection / 제네릭(Generic)  (0) 2020.09.22
[JAVA] Wrapper클래스  (0) 2020.09.22
[JAVA] GUI 스크롤바(RGB)  (0) 2020.09.20
[JAVA] GUI(AWT)  (0) 2020.09.16

기본 자료형 데이터(primitive type)를 객체로 바꿔주는 클래스래퍼클래스(Wrapper Class)라고 한다.

여기서 박싱(Boxing)언박싱(UnBoxing)이라는 개념이 나오는데

 

박싱(Boxing)기본 자료형(Primitive type)래퍼 클래스(Wrapper class)로 포장하는 것을 말하고

언박싱(UnBoxing)래퍼 클래스(Wrapper class)기본 자료형(Primitive type)으로 포장한 것을 다시 꺼내는 역할을 한다.

그렇다면 박싱과 언박싱을 사용하는 이유는 무엇일까?

 

이유는 제네릭이나 자료구조, 매개변수 등 primitive type이 아닌 referenct type을 사용하는 경우가 많기 때문이다.

특히 제네릭에서는 primitive type은 받지 않기 때문에 Wrapper클래스를 이용하여 제네릭을 사용해야 한다.

public class WrapperEx {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Integer num1 = new Integer(7); //박싱    기본자료형 --> Wrapper클래스     
		Integer num2 = new Integer(3); //박싱    기본자료형 --> Wrapper클래스 
	
		int int1 = num1.intValue();//언박싱    Wrapper클래스 ---> 기본 자료형
		int int2 = num2.intValue();//언박싱    Wrapper클래스 ---> 기본 자료형
	
		Integer result1 = num1+num2;  //10
		Integer result2 = int1-int2;  //4
		int result3 = num1 * int2;    //21
		
		
		System.out.println(result1);
		System.out.println(result2);
		System.out.println(result3);
	}

}

Java 5 버전부터 오토박싱과 오토언박싱을 지원하는데

명시적으로 표현해주지 않아도 오토 박싱과 오토 언박싱을 지원한다. 

'JAVA' 카테고리의 다른 글

[JAVA] 콜렉션 (Collection / 제네릭(Generic)  (0) 2020.09.22
[JAVA] 콜렉션-Collection  (0) 2020.09.22
[JAVA] GUI 스크롤바(RGB)  (0) 2020.09.20
[JAVA] GUI(AWT)  (0) 2020.09.16
[JAVA] 추상클래스  (0) 2020.09.14
package appEx;

import java.awt.*;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;


public class LayoutEx extends Frame implements AdjustmentListener {
//	Frame f = new Frame();
	
	Panel p1 = new Panel();
	Panel p2 = new Panel();
	
	public TextField tf;
	public Label la1,la2,la3,la4,la5,la6,la7,la8,la9,la10;
	public Scrollbar sb1, sb2, sb3;
	public TextArea ta;
	
	public LayoutEx() {
		//텍스트필드(한 문장)
		
		//라벨(공백)
		la1 = new Label(" ");
		la2 = new Label(" ");
		la3 = new Label(" ");
		la4 = new Label("현재 색상 ");
		la5 = new Label(" ");
		la6 = new Label(" ");
		la7 = new Label(" ");
		la8 = new Label(" ");
		la9 = new Label(" ");
		la10 = new Label(" ");

		
		//스크롤바 HORIZONTAL
		sb1 = new Scrollbar(Scrollbar.HORIZONTAL, 0, 10, 0 ,265);
		sb2 = new Scrollbar(Scrollbar.HORIZONTAL, 0, 10, 0 ,265);
		sb3 = new Scrollbar(Scrollbar.HORIZONTAL, 0, 10, 0 ,265);
		
		
		tf = new TextField("",30);		
		ta = new TextArea("",20, 10, 0);
		
		
		
		p1.setLayout(new GridLayout(10,1));
		p1.add(la1);
		p1.add(sb1);
		p1.add(la2);
		p1.add(sb2);
		p1.add(la3);
		p1.add(sb3);
		p1.add(la4);
		p1.add(tf);
		p1.add(la5);
		
	
		p2.setLayout(new BorderLayout());
		p2.add(la6, "East");
		p2.add(ta, "Center");
		p2.add(la7, "West");
		p2.add(la8, "North");
		p2.add(la9, "South");
		
		setLayout(new GridLayout(1,2));
		add(p1);
		add(p2);
		
		//이벤트 감청자 등록(움직임을 감지하여 알려줌) 
		sb1.addAdjustmentListener(this);
		sb2.addAdjustmentListener(this);
		sb3.addAdjustmentListener(this);
		
		
		setSize(500,500);
		setVisible(true);
	
		// 닫기(종료)
		addWindowListener(new WindowAdapter() { // 모바일에서 많이 사용(내부 익명)
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
	}
	
	@Override	
	public void adjustmentValueChanged(AdjustmentEvent e) {
		ta.setBackground(new Color(sb1.getValue(),sb2.getValue(),sb3.getValue()));
		tf.setText("R: " + sb1.getValue() + " G: " + sb2.getValue() + " B: " + sb3.getValue());
		
		
//		int r=0, g=0, b=0;
//		r = sb1.getValue();
//		g = sb2.getValue();
//		b = sb3.getValue();
//		
//		Color color = new Color(r,g,b);
//		ta.setBackground(color);
	}
	
	
	
	
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new LayoutEx();
	}




}

'JAVA' 카테고리의 다른 글

[JAVA] 콜렉션-Collection  (0) 2020.09.22
[JAVA] Wrapper클래스  (0) 2020.09.22
[JAVA] GUI(AWT)  (0) 2020.09.16
[JAVA] 추상클래스  (0) 2020.09.14
[JAVA] this  (0) 2020.09.14

GUI Progamming이란?

-GUI는 과거에 사용하였던 DOS(CUI)와 같은 방식의 Text기반 OS가 아닌 Graphic을 이용하여

User와 Program간의 상호작용을 할 수 있도록 해주는 Interface를 의미한다.

JAVA에서 이러한 Graphic Programmig을 지원하기 위해 나온 것이 바로 AWT이다.

 

 

AWT의 기본 개념

-AWT(Abstract Window Toolkit)은 GUI Programming을 제작하기 위해 자바에서 제공하는 Library을 모아놓은 것이다.

AWT는 모든 GUI Program에 사용되는 Component 및 Toolkit을 제공하고 있으며 향후에는 JFC와 같은 Swing 및 JAVA 2D 의 모태가 되는 개념이다.

AWT는 OS에 구애받지 않고 쓸 수 있도록 OS의 것을 그대로 사용하지 않고 공통적이고 기본적인 Component들을 추상화시켜 제공한다.

 

 

https://docs.oracle.com/javase/8/docs/api/java/awt/package-frame.html

 

java.awt (Java Platform SE 8 )

 

docs.oracle.com

이 곳에 들어가면 자바 사용할 수 있는 Interface나 class가 있는데 클릭해서 들어가보면 사용 방법이 자세하게 나와있다.

 

 

 

import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;


public class GuiEx extends Frame{
	public GuiEx(){
		//패널
		Panel p = new Panel();
		//버튼
		Button b = new Button("버튼");
		b.setLabel("변경된 라벨");
		//체크 박스
		Checkbox ch1 = new Checkbox("체크 박스", true);
		Checkbox ch2 = new Checkbox("체크 박스", false);
		Checkbox ch3 = new Checkbox("체크 박스", false);
		//체크 박스(라디오 버튼)
		CheckboxGroup ch = new CheckboxGroup();
		Checkbox ch4 = new Checkbox("라디오 버튼", true, ch);
		Checkbox ch5 = new Checkbox("라디오 버튼", false, ch);
		Checkbox ch6 = new Checkbox("라디오 버튼", false, ch);
		//초이스(콤보 박스)
		Choice cho = new Choice();
		cho.add("학년 선택");
		cho.add("1학년");
		cho.add("2학년");
		cho.add("3학년");
		cho.add("4학년");
		
		//라벨, 리스트
		Label la = new Label("자바 수강생");
		List ls = new List(5);
		ls.add("List 1");
		ls.add("List 2");
		ls.add("List 3");
		ls.add("List 4");
		ls.add("List 5");
		ls.add("List 6");

		//스크롤바 HORIZONTAL
		Scrollbar sb = new Scrollbar(Scrollbar.HORIZONTAL, 200, 100, 0 ,255);
		//스크롤바 VERTICAL
		Scrollbar sb2 = new Scrollbar(1, 200, 100, 0 ,255);
		//텍스트필드(한 문장)
		TextField tf = new TextField("TextField",50);
		//텍스트 에어리어(여러 문장)
		TextArea ta = new TextArea("TextArea",20, 10, 0);
		//생성한 객체들을 panel에 붙이기
		p.add(ch1);
		p.add(ch2);
		p.add(ch3);
		p.add(cho);
		p.add(ch4);
		p.add(ch5);
		p.add(ch6);
		p.add(b);
		p.add(la);
		p.add(ls);
		p.add(sb);
		p.add(sb2);
		p.add(tf);
		p.add(ta);
		//프레임에 붙이기 (this. 이 생략 되어있음)
		add(p);

		//컨테이너
		setSize(500, 500);
		setVisible(true);
		
		//닫기(종료)
		addWindowListener(new WindowAdapter() { //모바일에서 많이 사용(내부 익명)
			public void windowClosing(WindowEvent e) {
				System.exit(0);
			}
		});
	
	
	}

	
	public static void main(String[] args) {
		new GuiEx();
	}
}

각종 컴포넌트들을 예로 사용한 결과이다.

 

컴포넌트란(ex. Button, Checkbox, TextField 등등)을 말하는데 컴포넌트는 Panel(패널)에 담아 원하는 위치에 집어 넣을 수 있다. 컴포넌트들을 집어 넣은 패널은 또 다시 최상위 컨테이너인 Frame(프레임)에 넣어 배치할 수 있다.

 

하지만, 컴포넌트는 컨테이너(프레임)역할을 할 수 없다. (컨테이너는 컴포넌트 역할을 할 수 있음)

'JAVA' 카테고리의 다른 글

[JAVA] Wrapper클래스  (0) 2020.09.22
[JAVA] GUI 스크롤바(RGB)  (0) 2020.09.20
[JAVA] 추상클래스  (0) 2020.09.14
[JAVA] this  (0) 2020.09.14
[JAVA] 생성자 오버로딩  (0) 2020.09.11

추상 클래스는 객체 생성이 불가능한 클래스(타입)으로 자식 클래스를 통해 간접적으로 객체를 생성한다.

또한 추상클래스는 상속(코드 중복 제거)과 인터페이스의 장점(다형성과 그룹화)을 모두 가지고 있다.

추상 클래스는 abstract키워드를 사용하여 선언하며 어떠한 객체가 스스로 존재할 수 없는 경우 또는 

존재하면 안되는 경우에 사용한다!

 

ex)

class Tiger{
	String name;
}
class Lion{
	String name;
}
class Dog{
	String name;
}

//String name; 이라는 중복 코드가 발생!!

이 중복된 필드를 상속을 통해 제거한다.

 

class Animal{
	String name;
}

class Tiger extends Animal{}
class Lion extends Animal{}
class Pig extends Animal{}
하지만 추상 클래스는 스스로 객체화 할 수 없다!!

abstract class Animal 

//Compile Error!!
Animal a = new Animal();

 

'JAVA' 카테고리의 다른 글

[JAVA] GUI 스크롤바(RGB)  (0) 2020.09.20
[JAVA] GUI(AWT)  (0) 2020.09.16
[JAVA] this  (0) 2020.09.14
[JAVA] 생성자 오버로딩  (0) 2020.09.11
[JAVA] 클래스와 객체 -1  (0) 2020.09.08

+ Recent posts