2차원 배열이란 배열의 배열이다.
- 2차원 배열 생성 방법
- 정수를 4개씩 담을 수 있는 배열이 3개 생성된다.
int[][] array4 = new int[3][4];
- 2차원 배열에 값을 저장하는 방법
- 만약 array4[1] = 10 ; 이렇게 사용하면 오류!!
- array4[1] 은 또 다른 1차원 배열을 가리킬 수 있는 참조형 변수이기 때문에 값을 담을수는 없다.
array4[0][0] = 10;
- 가변크기의 2차원 배열을 생성하는 방법
int[][] array5 = new int[3][];
//위와 같이 선언하면 array5는 3개짜리 배열을 참조한다. 3개짜리 배열은 아직 참조하는 배열이 없다는 것을 의미.
array5[0] = new int[1]; //정수를 하나 담을 수 있는 배열을 생성해서 array5 의 0 번째 인덱스가 참조한다.
array5[1] = new int[2]; //정수를 두개 담을 수 있는 배열을 생성해서 array5 의 1 번째 인덱스가 참조한다.
array5[2] = new int[3]; //정수를 세개 담을 수 있는 배열을 생성해서 array5 의 2 번째 인덱스가 참조한다.
- 선언과 동시에 초기화하는 방법
int[][] array6 = {{1}, {2,3}, {4,5,6}};
//위와 같이 선언할 경우 array6[0][0] 는 1이다. array6[1][0]은 2이다.
클래스 선언
클래스
자바는 객체를 만들기 위해 반드시 클래스를 먼저 만들어야 한다. 클래스는 객체를 만들기 위한 일종의 틀이다.
- 붕어빵이 객체라면, 붕어빵 틀은 클래스
- 자동차 클래스 생성
public class Car{
}
- Car.java란 파일을 만든다.
- 저장을 하면 이클립스는 컴파일하여 디스크에 Car라는 클래스를 생성한다.
- 자동차 클래스가 생성되었다고 해서 자동차가 만들어 진것은 아니다.
Car객체 생성하기 (자동차 만들기)
public class CarExam{
public static void main(String args[]){
Car c1 = new Car();
Car c2 = new Car();
}
}
- new 연산자는 new연산자 뒤에 나오는 생성자를 이용하여 메모리에 객체를 만들라는 명령.
- 메모리에 만들어진 객체를 인스턴스(instance)라고도 한다.
- 이렇게 만들어진 객체를 참조하는 변수가 c1 , c2 이다.
- 위의 코드가 실행되면 Car라는 객체가 2개가 만들어지고 각각의 객체를 참조하는 c1과 c2변수가 선언됩니다.
String클래스
String 클래스
문자열을 표현하는 자바에서 가장 많이 사용하는 클래스
자바 인스턴스 생성 방법
- new연산자를 이용하지 않고 인스턴스를 만드는 경우
String str1 = "hello";
String str2 = "hello";
- "hello"라는 문자열이 메모리 중에서 상수가 저장되는 영역에 저장된다. 상수는 변하지 않는 값을 의미.
- String str2 = "hello"; 이 문장이 실행될 때에 hello 라는 문자열 상수는 이미 만들어져 있으므로 str1이 참조하는 인스턴스를 str2도 참조한다.
2.new연산자를 이용해서 인스턴스를 만드는 경우
String str3 = new String("hello");
String str4 = new String("hello");
- new연산자를 이용하여 인스턴스를 만들면 인스턴스는 무조건 새롭게 만들어진다.
- String str4 = new String("hello"); 이 문장이 실행될때도 새롭게 만들게 되므로, str3 과 str4는 서로 다른 인스턴스를 참조한다.
if(str1 == str2){ // 같은 인스턴스를 참조하므로 결과는 true
System.out.println("str1과 str2는 같은 레퍼런스입니다.");
}
if(str1 == str3){ // str1과 str3은 서로 다른 인스턴스를 참조하므로 결과는 false
System.out.println("str1과 str3는 같은 레퍼런스입니다.");
}
if(str3 == str4){ // str3과 str4는 서로 다른 인스턴스를 참조하므로 결과는 false
System.out.println("str3과 str4는 같은 레퍼런스입니다.");
}
- 참조변수끼리 == 로 비교하면 서로 같은 것을 참조하는지 비교한다.
- String은 다른 클래스와 다르게 new를 사용하지 않고 사용할 수 있다. 메모리를 아끼려면 String은 new를 사용하지 않고 사용하는 것이 좋다.
- String은 불변 클래스이다. 불변이란 String이 인스턴스가 될때 가지고 있던 값을 나중에 수정할 수 없다.
- String은 문자열과 관련된 다양한 메소드를 가지고 있다. 메소드를 호출한다 하더라도 String은 내부의 값이 변하지 않는다.
- String이 가지고 있는 메소드중 String을 반환하는 메소드는 모두 새로운 String을 생성해서 반환한다.
String str5 = "hello world";
String str6 = str5.substring(3);
- substring은 문자열을 자른 결과를 반환하는 메소드이다. 해당 코드가 실행되어도 str5는 변하지 않는다.
- str6은 str5가 가지고 있는 문자열 중 3번째 위치부터 자른 결과 즉 새로운 String을 참조하게 된다.
필드(field)선언
자동차는 자동차 이름, 자동차 번호를 가지고 있고, 자동차는 달리고 멈추는 기능이 있다. 여기에서 가지고 있는 것을 속성이라고 한다. 자바에서는 이러한 속성을 필드(Field)라는 용어로 사용한다.
- 이름과 번호를 필드로 가지고 있는 Car클래스 선언
public class Car{
String name;
int number;
}
- Car 클래스를 인스턴스화 하기
Car c1 = new Car();
Car c2 = new Car();
//Car라는 인스턴스가 메모리에 2개 만들어 진다. 객체별로 name과 number라는 속성을 가진다.
- 속성 이용하기
- 참조 변수 다음에 나오는 점(dot)은 참조변수가 참조하는 객체가 가지고 있는 것을 사용할 때 사용
//c1.name은 c1이 참조하는 객체의 name 을 의미.
c1.name = "소방차"; //c1이 참조하는 객체의 name을 소방차로 설정
c1.number = 1234; // c1.number = 1234란 c1이 참조하는 객체의 number를 1234 로 설정
c2.name = "구급차" //c2가 가리키는 객체의name을 구급차로 설정
c2.number = 1004; //c2가 가리키는 객체의 number를 1004로 설정
System.out.println(c1.name); //콘솔에 c1이 참조하는 객체의 name 을 출력합니다.
System.out.println(c1.number); //콘솔에 c1이 참조하는 객체의 number 를 출력합니다.
String name = c2.name; //c2가 참조하는 객체의 name 을 String 타입 변수 name 도 참조하게 합니다.
메소드란?
메소드
필드가 물체의 상태라면, 물체의 행동에 해당하는게 메소드다. car에 이름과 번호가 있기도 하지만, car는 앞으로 전진할수도 있고 후진하는 행동도 할 수 있다.
- 메소드는 입력값이 있고, 그 입력값을 받아서 무언가 한 다음 결과를 도출해 내는 수학의 함수와 비슷한 개념이다.
- 이때 입력값을 매개변수라고 하고,결과값을 리턴값이라고 합니다.
- 인자( Argument ) 는 어떤 함수를 호출시에 전달되는 값을 의미한다.
- 매개 변수( Parameter ) 는 그 전달된 인자를 받아들이는 변수를 의미한다.
- 메소드란 클래스가 가지고 있는 기능이다. 클래스 안에 선언됩니다.
메소드(Method) 선언
다양한 형태의 메소드
- 매개변수도 없고 리턴하는 것도 없는 형태의 메소드
- 리턴하는 것이 없을 경우 void라고 작성합니다.
public class MyClass{
public void method1(){
System.out.println("method1이 실행됩니다.");
}
}
- 정수를 받아들인 후, 리턴하지 않는 메소드
- 받아들이는 값은 어떤 타입이라도 상관없다.
- 받아 들이는 값의 수는 여러개 일 수 있다. 여러개을 경우 콤마(,)로 구분한다.
public class MyClass{
public void method2(int x){
System.out.println(x + " 를 이용하는 method2입니다.");
}
}
이번엔 정수를 받아들인 후, 리턴하지 않는 메소드입니다. 이것을 클래스에서 작성하면 다음과 같습니다.
- 아무것도 받아들이지 않고, 정수를 반환하는 메소드
- 리턴하는 값 앞에 return 이라는 키워드를 사용한다.
- 메소드 이름 앞에는 리턴하는 타입을 적어준다.
- 리턴타입은 하나만 사용할 수 있다. 리턴하는 타입은 어떤 타입이라도 상관없다.
public int method3(){
System.out.println("method3이 실행됩니다.");
return 10;
}
//위 메소드가 실행되면, 콘솔에 'method3이 실행됩니다.' 를 출력하고, 이 메소드를 호출한 쪽에 10을 리턴한다.
- 정수를 2개 매개변수로 받고, 아무것도 반환하지 않는 메소드
public void method4(int x, int y){
System.out.println(x + "," + y + " 를 이용하는 method4입니다.");
}
- 정수를 한개 받아들인 후, 정수를 반환하는 메소드
public class MyClass{
public void method(){
System.out.println("method1이 실행됩니다.");
}
public void method2(int x){
System.out.println(x + " 를 이용하는 method2입니다.");
}
public int method3(){
System.out.println("method3이 실행됩니다.");
return 10;
}
public void method4(int x, int y){
System.out.println(x + "," + y + " 를 이용하는 method4입니다.");
}
public int method5(int y){
System.out.println(y + " 를 이용하는 method5입니다.");
return 5;
}
}
'비트교육 > JAVA' 카테고리의 다른 글
[15일차] JAVA Programmers 개념정리 (0) | 2022.07.08 |
---|---|
[15일차] JAVA (0) | 2022.07.08 |
[14일차] JAVA 객체지향 (0) | 2022.07.07 |
[13일차] JAVA 연산자 / 제어문 for if while do while (0) | 2022.07.06 |
[12일차] JAVA 역사/ 설치/ println (0) | 2022.07.05 |
댓글