반응형

앞서,

인스턴스의 존재이유 :  "서로 다른 개성을 존중하자!" 라고 생각하자라는 

whatisthenext.tistory.com/36

 

[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문의 마지막에 i0이되서 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! 특정한 위치에 있는 값을 바로 불러올 수가 있다.

한번 만들어 보기 바란다.

 

반응형

+ Recent posts