국비지원수업

Java/자바[8일차]-배열에 데이터 삽입/삭제,전역변수,지역변수

둥구는 지굴다 2022. 10. 31. 22:13

안녕하세요 오늘은  배열에 데이터 삽입/삭제

전역 변수와 지역변수의 차이점 그리고 static멤버에 대해 배운 점을 정리해보겠습니다.

배열에 데이터 삽입

배열은 크기를 한번 지정하면 늘리거나 줄일 수 없습니다.

따라서 데이터를 추가하려면 한 칸씩 값을 밀어서 공간을 만든 뒤 값을 넣어주어야 합니다.

//인덱스  k위치에 삽입하는 메소드
	public static void arrayInsert(int[] arg,int k,int val) {
		for(int i=arg.length-2;i>=k;i--) //lengrh-2는 마지막인덱스 값에서 한칸 더 앞인 인덱스 값
			arg[i+1]=arg[i]; //한 칸씩 밀어서 공간을 만들어줌 
			arg[k]=val; //인덱스k에 val값 삽입.
	}

위의 for문이 조금 헷갈릴 수도 있지만

i의 초기 값을 확인해보면 배열. length-2입니다.

이 의미는 배열. length-1은 배열의 마지막 인덱스 값을 의미하는데 

-2는 마지막 값에서 한 칸 더 앞의 인덱스를 의미합니다.

따라서 arg [i+1]=arg [i]는 

i값이 5라면  arg [6]=arg [5]가 됨으로 뒤에 있는 값이 한 칸 앞으로 당겨져서 val값이 들어갈 공간을 만들어 줍니다.

메인 메서드에서 실행

	public static void main(String[] args) {
        arrayPrint(arr2);
	arrayInsert(arr2,3,50);
        }

기본 배열 값 {99,88,76,65,54,43,32,22,11}

배열의 인덱스 3번에 50 추가

맨 뒤 값인 11은 사라지고 한 칸씩 밀려 50을 인덱스 3번에 삽입함

배열에서 데이터 삭제

배열에서 데이터를 삭제하려면 원하는 인덱스 값부터 순차적으로 값을 밀어줌

데이터 삽입하고 삭제는 바깥으로 밀어버리는 느낌이라면

삭제는 한 칸씩 값을 당겨서 끝 값을 삭제하는 느낌이다.

//인덱스  k위치 데이터를 삭제하는 메소드
	public static void arrayRemove(int[] arg,int k) {
		for(int i=k;i<arg.length-1;i++) //i가 증가하는 방향으로 실행
			arg[i]=arg[i+1]; //현재 i의 값에 뒤의 값을 대입
		arg[arg.length-1]=0; //마지막 인덱스를 0으로 안해주면 같은 값이 두개가 나옴
	}

i의 초기 값은 데이터의 삽입과 다르게 삭제를 원하는 값의 인덱스 값부터 시작합니다.

그리고 조건식은 배열의 인덱스 번호만큼 반복하죠

2번 인덱스를 지운다는 기준으로

arg [2]=arg [3]; /arg [3]=arg [4] / arg [4]=arg [5]

이런 식으로 배열의 마지막 인덱스 값까지 변환을 합니다.

그런데 arg [arg.length-1]=0을 해준 이유는 위의 방법으로 값이 이동하다 보면

맨뒤 값과 맨뒤 값 앞에의 값이 같아지게 됩니다.

따라서 마지막 값은 0으로 만들어 줍니다. 

변수의 종류

변수의 종류는 변수의 선언 위치에 따라 전역 변수 /지역 변수로 나누어집니다.

전역 변수

전역 변수는 이름에서 알 수 있듯이 전체에서 어디서든 호출하면 쓸 수 있습니다.

(함수 밖에서 선언되어 클래스 어디서든 사용할 수 있음)

지역 변수

지역 변수는 메서드처럼 { }(중괄호) 안에서 선언되고 사용되는 변수입니다.

(함수 안에서 선언되어 함수 안에서 사용되는 변수)

전역 변수 예시

전역 변수는 위와 같이 함수 안이 아닌 바깥에 선언되어 있다.

지역 변수 예시

public static void testMethod() {
		int test=999;
		System.out.println("val="+val);
		System.out.println("num="+num);
		System.out.println("test"+test);
//		System.out.println("count"+count); //오류: static은 static만 사용할 수 있습니다.
	}//변수 tes는 이 메소드가 실행이 끝나면 없어지는 변수입니다.

위의 예시는 하나의 메서드를 만들었습니다.

int test는 메서드 안에서 선언되었기 때문에 지역변수이며

test변수는 메서드가 실행이 끝나면 없어집니다.

메서드 안에서 위에 선언한 전역 변수들을 사용할 수 있습니다

하지만 위의 메서드는 static메서드이기 때문에 일반 지역변수인 count는 오류가 나는 것을 볼 수 있습니다.


이상으로 글 마치겠습니다.