본문 바로가기

코딩 공부/Java

메모리 구조와 배열

메모리 구조

모든 자바 프로그램은 자바 가상 머신(JVM)을 통해서 실행된다.

운영체제에 독립적이다.

메서드(method) 영역

클래스의 정보 클래스 변수(static variable) 저장

JVM은 클래스가 사용될 때 *. class 읽어 들여 해당 클래스에 대한 정보를 메서드 영역에 저장한다.

힙(heap) 영역

인스턴스 변수가

new키워드를 사용해서 만드는 변수 영역

스택(stack) 영역

메서드의 정보 또는 일반 변수들이 저장된다.’

참조 변수

 

 

배열

같은 자료형의 여러 개의 데이터들을 하나의 공간에 저장 & 관리

int [] arr=new int [5];

arr는 배열을 저장하고 있는 주소를 저장 주소의 이름.

[index] 안에 있는 수만큼 공간이 만들어진다.

 

int [] arr = new int []{1,2,3,4,5}; 

-뒤에 데이터를 나열했기 때문에 데이터의 사이즈를 입력하면 안된다.

 

int [ ] ints3 = {1,2,3,4,5};

new int [ ]는 생략 가능하다.

1 2 3 4 5
arr[0] arr[1] arr[2] arr[3] arr[4]

 

여러 개의 변수를 한 번에 선언 가능

같은 형의 변수들을 연속적으로 쓸 수 있다.(반복문 사용할 때 더 효율적으로 코드를 작성할 수 있다.

 

배열 참조 변수 생성

DataType [ ] 배열 이름;

[ ]

일반 선언문과 동일하며 배열 이름 위 배열의 크기를 정한다

배열 선언 시 [ ] 괄호가 1개일 때 1차원 배열 2개일 때 2차원 배열이라 한다

사용할 수 있는 배열의 요소의 첨자는 0부터 시작한다. 

배열의 이름은 배열의 첫 번째 주고를 가지는 참조 변수이다.

String []

int []

double []

컬랙션 프레임 워크가 더 많이 쓰이기는 하지만

메서드에서 반환한 값이 여러 개일 때 배열일 수 있어서 아예 배제하지는 못한다.

배열의 사용

배열에 규칙이 있을 때

*. length로 배열의 크기를 가져올 수 있다.

for(int i =0;i<arr.length;i++) {
arr[i] = 100*(i+1);
System.out.println("arr["+i+"]"+arr[i]);
}

배열의 크기는 상수의 값보다는 참조 변수 length를 쓴다

공간의 삭제는 하지 않는다.

정렬

선택 정렬(selection sort)

코드상 보기가 편하다.

임시로 플래그를 만들어서 swap 시킨다.

오름차순 정렬 : 수가 점점 올라감

package arrays;
public class Ex07 {
	public static void main (String[] args) {
		int[] arr =  {4,2,7,9,3};
		for(int i = 0;i<arr.length;i++) {
			for(int j=i+1;j<arr.length;j++) {
				if(arr[i]>arr[j]) {
					int tmp = arr[i];
					arr[i] = arr[j];
					arr[j] = tmp;
				}
			}
		}System.out.print("배열 데이터 :");
		for(int i = 0; i<arr.length;i++) {
			System.out.print(arr[i]+" ");
		}System.out.print("입니다");
	}
}

 

내림차순 정렬 : 수가 점점 내려감



다차원 배열

2차원 이상의 배열(맵이나 지도 등을 사용할 때 쓰인다.)

배열을 입체적으로 표현한 모양

type 배열명[ ][ ] = new type[ ] [ ];

type[ ][ ] 배열명 = new type[행] [열];

행과 열은 가변 시킬 수 있다.

 

package arrays;
public class Ex08 {
	public static void main(String[] args) {
		int[] arr1 = new int[15];
		for(int i = 0;i<arr1.length;i++) {
			arr1[i]= i +1;
		}System.out.print("번호 :");
		for(int i =0;i<arr1.length;i++) {
			System.out.println(arr1[i]+" ");
		}
		int[][] arr2 = new int[3][5];
		int data = 1;
		for(int i=0; i<arr2.length;i++) {//행(줄)
			for(int j = 0;j<arr2[i].length;j++) {//열(칸)
				arr2[i][j]=data++;
			}
		}
		for(int i=0; i<arr2.length;i++) {
			for(int j = 0;j<arr2[i].length;j++) {
				System.out.print(arr2[i][j]+" ");
			}
		System.out.println();
		}
	}
}

 

String

wrapper class

heap에 저장된다.

new String() 은 생략 가능하다.

 

String data1 = "Java is Easy. 그리고 programming 할만하다.";
String data2;
System.out.println("출력 : "+ data1);
data2 = data1.toUpperCase();
System.out.println("변환 후 : " + data2);
data2 = data1.toLowerCase();//변수에 꼭 저장해야한다
System.out.println("변환 후 : " + data2);
data1.toLowerCase();
System.out.println("출력 : " + data1);

출력 : Java is Easy. 그리고 programming 할만하다.
변환 후 : JAVA IS EASY. 그리고 PROGRAMMING 할만하다.
변환 후 : java is easy. 그리고 programming 할만하다.
출력 : Java is Easy. 그리고 programming 할만하다.
String str = "abcd efg";


System.out.println(str.length());
System.out.println(str.charAt(1));
System.out.println(str.charAt(0)=='a');
System.out.println(str.charAt(0)=='c');
System.out.println(str.charAt(0)-32);
System.out.println((char)(str.charAt(0)-32));


String addStr;
addStr = "a";
System.out.println(addStr);
addStr +="b";
System.out.println(addStr);

8
b
true
false
65
A
a
ab
String str = new String("  Have a nice day  ");
String result = str.trim();//양 끝의 공백제거
System.out.println("--"+str+"--");
System.out.println("--"+result+"--");
String[] split = result.split(" ");
//문자열 자르기 ""안의 문자를 기점으로 잘라서 반환하고 배열로 저장
for(int i =0;i<split.length;i++)System.out.println(split[i]);
//향상for문
for(String p: split)//for(데이터 : 데이터들)
System.out.println(p);//더이상 없으면 for문에서 나온다.


String replace = result.replace(" ","^");//값을 치환
System.out.println("replace : "+ replace);


--  Have a nice day  --
--Have a nice day--
Have
a
nice
day
Have
a
nice
day
replace : Have^a^nice^day

 

'코딩 공부 > Java' 카테고리의 다른 글

Hash Set  (0) 2022.08.20
Collection Framework & ArrayList  (0) 2022.08.19
JAVA Random  (0) 2022.08.17
자바 콘솔 입 출력  (0) 2022.08.16
Java switch case와 반복문 for  (0) 2022.08.15