앞서,
인스턴스의 존재이유 : "서로 다른 개성을 존중하자!" 라고 생각하자라는
[JAVA} 클래스와 인스턴스(Class, Instance)
0. 들어가기 앞서 클래스는 기본 뼈대이고 인스턴스는 구체적인 "상태(변수)" 와 "행위(기능)"의 집합이라고 생각하자. 위 카드를 생각해본다면 카드 클래스에 대표적으로 들어가야 할 것들이 있
whatisthenext.tistory.com
이 분의 말씀. 간단명료하고 좋다.
객체
오토바이라는 이름은 하나의 객체(Object)이며, 바퀴, 의자, 기어변속기, 브레이크 페달처럼 객체가 지니고 있는 특성 또는 속성은 상태(state)를 의미하고, 속도를 낸다, 속도를 줄인다, 경적을 울린다 등은 객체가 할 수 있는 행동(behavior)를 말합니다. 정리하자면, 객체는 상태(특성, 속성)와 행동(동작)로 이루어져 있다고 보시면 됩니다.
출처: https://blog.hexabrain.net/104 [끝나지 않는 프로그래밍 일기]
AddLast라는 메소드를 만들어서 그것을 이용해 (뒤에서부터)순차적으로 값을 넣어보자!
package list.arraylist.implementation;
public class Main {
public static void main(String[] args) {
ArrayList numbers = new ArrayList();
numbers.addLast(10);
numbers.addLast(20);
numbers.addLast(30);
}
}
package list.arraylist.implementation;
public class ArrayList {
private int size = 0;
private Object[] elementData = new Object[100];
public boolean addLast(Object element) {
elementData[size] = element;
size++;
return true;
}
}
1.list.arraylist.implementation;이라는 패키지를 생성한다.
2.ArrayList클래스를 만들어준다.
3.정의 후, addLast라는 메소드를 만들기위해, ArrayList클래스 안에 addlast를 정의해준다.
4.addLast는 객체를 인자를 받고, element라는 인자의 이름을 설정해준다.
5. size를 0으로 초기화 시킨 후 elementData[0(size)]가 element 즉 addLast(메소드)를 이용해
객체를 추가 할때마다 size를 1씩 증가시키고, true를 출력한다(옳게 사용되길 확인해야하니까?)
배열 중간지점에 값을 넣어보자!
package list.arraylist.implementation;
public class Main {
public static void main(String[] args) {
ArrayList numbers = new ArrayList();
numbers.addLast(10);
numbers.addLast(20);
numbers.addLast(30);
numbers.addMid(2, 10);
}
}
package list.arraylist.implementation;
public class ArrayList {
private int size = 0;
private Object[] elementData = new Object[100];
public boolean addLast(Object element) {
elementData[size] = element;
size++;
return true;
}
public boolean addMid(int index, Object element){
//elementData[size] = elementData[size-1]
for (int i=size-1; i >= index; i-- ){
elementData[i+1] = elementData[i];
}
elementData[index] = element;
size++;
return true;
}
}
처음에 이해가 안되서 한 30분 동안 봤다.
내가 이해한 입장에서 설명 해보자면,
이 index를 사용해서 사이에 낑겨 넣을려고하면,
그 원래 있던 element의 값을 싹 다 뒤로 땡겨줘야 한다.
그러기 위해서 반복문을 사용해서 뒤로 미는 작업을 해주는데,

만약 내가 index 1번에다가 넣고 주고 싶으면, 3->4 2->3 1->2
여기서 중요한건, 1번에다가 넣어주기 위해 1번도 땡겨야한다는 사실이다.
결국에 for문의 마지막에 i가0이되서 elementData가 1도 비워야하니까
(int i=size-1; i >= index; i-- ) 의 i >= index 의미는 마지막 1>= 1 (한번 더 반복문 돌려주고)
i--로 i가 0이됨으로써 이 반복문은 멈추게 된다.
그럼으로 인덱스에 값을 넣어주고, true를 반환함으로써 작지만 이 꿀같은 성취감을 얻을 수 있다.
반복문이 조금 이해가 어려울 수도 있다.
반복문 중에 i>=index 를 해석을 하자면
i를 반복하는데, index보다 같거나 큰 동안 만큼 반복한다~ 라고 해석하면 쉽다.
배열 맨 처음에 값 넣기!
package list.arraylist.implementation;
public class ArrayList {
private int size = 0;
private Object[] elementData = new Object[100];
public boolean addLast(Object element) {
elementData[size] = element;
size++;
return true;
}
public boolean addMid(int index, Object element){
//elementData[size] = elementData[size-1]
for (int i=size-1; i >= index; i-- ){
elementData[i+1] = elementData[i];
}
elementData[index] = element;
size++;
return true;
}
public boolean addFirst(int index, Object element){
return addMid(0, element);
}
}
;;
;;
;;;;;;;;;;;;;;;;;;;;;;;
이놈은 개쉽다.
만들어논 addMid를 이용해, 인덱스 0을 넣어준뒤, 그대로 끝내면 ... for문까지 완벽하게 이용해버리는
넌 대체. .............비용을 10%만 사용해서 공장에 기계하나 더 넣은 느낌..
삭제해주기
package list.arraylist.implementation;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
arraylist numbers = new arraylist();
numbers.addLast(10);
numbers.addLast(20);
numbers.addLast(30);
//중간에 집어넣기
numbers.addMid(1, 15);
;
System.out.println(numbers.remove(1));
}
}
----------------------------------------------------
public Object remove(int index){
Object removed = elementData[index];
//elementData[1] = elementData[2];
for(int i=index+1; i<=size-1; i++){
elementData[i-1] = elementData[i];
}
size--;
//맨 마지막꺼 삭제해주기 위해
elementData[size] = null;
return removed;
}
출력 15
삭제하면서 리턴 값으로 삭제된 element를 출력하기 위해서,
Object를 받아와서 삭제되기 전에 removed라는 변수에 넣어준다.
elementData[size] = null;을 해주는 이유는
size는 총 배열의 개수를 의미하므로
뒤에서 하나씩 element값들을 땡겨옴과 동시에
맨 뒤값이라 할 수 있는 size값을 = null로 해준다.
(값은삭제는 되었지만 방은 남아있어서 철거한다고 생각하면 됨)
you know what i'm saying?
스트링(,) 넣어주기
public String toString(){
String str = "[";
for (int i=0; i<size; i++){
str += elementData[i];
if(i < size-1){
str +=",";
}
}
return str + "]";
}
출력
[10,15,20,30]
'나머지 등등
public Object removeFirst(){
return remove(0);
}
public Object removeLast(){
return remove(size-1);
}
/////////////////////////////////////////
//Arraylist의 가장 큰~~~ 장점인 get! 특정한 위치에 있는 값을 바로 불러올 수가 있다.
public Object get(int index){
return elementData[index];
}
Arraylist의 가장 큰~~~ 장점인 get! 특정한 위치에 있는 값을 바로 불러올 수가 있다.
한번 만들어 보기 바란다.
'개발공부 > 자료구조' 카테고리의 다른 글
자료구조(Linked list) 구현 (0) | 2020.12.04 |
---|---|
클래스의 인스턴스화2(Iterator 반복문) (0) | 2020.12.02 |
자료구조(ArrayList) (0) | 2020.11.25 |
자료구조(배열과 리스트) (0) | 2020.11.25 |
자료구조(Data Structure[feat.생활코딩]) 1 (0) | 2020.11.25 |