자바(Java)는 1995년 미국의 썬 마이크로시스템즈의 제임스 고슬링(James Gosling)과 다른 연구원들이 개발한 객체 지향적 프로그래밍 언어이다.
자바의 특징
1. 쉽다. ( C와 C++문법을 바탕으로 하지만 포인터와 다중상속 부분이 삭제됨)
2. 플랫폼에 독립적이다. ( JVM만 있으면 모든 운영체제에서 실행 가능)
3. 객체지향 언어다.
4. 메모리 관리를 자동으로 해준다.
배열은 데이터형이 같은 변수가 여러 개 필요할 때 사용함.
배열 생성방법 : new라는 키워드를 사용
public class ArrayExam{
public static void main(String[] args){
int[] array1 = new int[100]; // array1이 배열이름, 인덱스는 100까지 사용가능
int[] array2 = new int[]{1,2,3,4};
int[] array3 = {1,2,3,4};
int value = array3[0];
System.out.println(value);
array1[0] = 50; // 배열 array1의 0번 인덱스에 50 담기
array1[1] = 100;
// System.out.println(array1[1]);
}
}
배열에 값을 넣을 때는 배열의 이름과 배열의 표시인 대괄호 안에 인덱스를 적으면 됨.
📌 배열은 기본 자료형이 아니라 이 부분을 참조하라는 참조형 !!
public class ArrayWithFor{
public static void main(String[] args){
int[] iarraay = new int[100];
for(int i=0; i < iarrray.length; i++){
iarray[i] = i + 1; // 100개의 배열 안에 0부터 차례로 숫자를 할당
}
for(int i =0; i < array.length; i++){
/* 배열인덱스는 0부터
배열의 크기는 배열명.length를 사용*/
sum = iarray[i];
}
int sum = 0;
/* for문 안에 선언하면 for블록 밖에서는 변수를 사용하지 못함.
게다가 for블록을 실행하고 다시 반복하는 시점에 변수를
매번 새롭게 선언하므로 지속적인 값 저장 X */
for(int i =0; i < array.length; i++){ // 배열 크기만큼 반복
sum += iarray[i]; // 반복문 밖에서 선언한 변수 누적
}
System.out.println(sum); // 변수 출력
}
}
선언할 때 배열표시를 두 번 적으면 됨.
for(형과 값을 받아줄 변수명:출력하고 싶은 자료구조)
for (int index=0; index < array.length; index++) {
int i = array[index];
System.out.println(i);
}
for (int i:array) {
System.out.println(i);
위 두 코드는 같은 문장.
for each문
for문 내에서 인덱스를 초기화, 배열의 크기와 인덱스 크기를 비교하여 인덱스를 증가, 배열에 저장된 인덱스에 해당하는 값을 꺼내서 변수에 담음
용어정리 | |
---|---|
객체 | 우리가 소프트웨어 세계에 구현해야 할 대상 |
클레스 | 객체를 구현하기 위한 설계도 |
인스턴스 | 클레스라는 설계도에 따라 소프트웨어 세상에 구현된 실체 |
인스턴스화 | 클레스를 메모리에 올려 인스턴스를 만드는 과정 |
public class 클레스 명 { // 클레스 블록
public static void main (String[] args){
Car c1 = new Car();
/* new 뒤의 Car은 생성자,
c1이라는 객체를 생성,
--> 메모리에 객체가 만들어졌고 이를 인스턴스라고 함.
}
/* c1은 가리키는 변수, 참조하는 변수, 레퍼런스하는 변수이고
변수가 인스턴스를 가지는 것이 아니라 말 그대로 가리킨다는 의미 */
}
기본형 : 논리형, 문자형, 정수형, 실수형
참조형(=래퍼런스형, 클래스 타입, 사용자 정의형 타입) : 배열, 클레스 ... 등등
==> 주로 객체 연결을 위한 타입
Q : 객체를 변수에 담으면 안되나 ?
A : 객체는 하나의 변수에 담기에 너무 크다. 뿐만 아니라 그 크기가 유동적이다. 때문에 자바는 객체 접근을 위해 어드레싱(addresing) 방식 즉, 주소지를 통한 접근 방식을 취한다.
String str1 = "hello";
String str2 = "hello";
/* "hello"라는 문자열은 상수를 저장하는 영역에 저장됨.
두번째 문장이 실행될 때 hello라는 문자열 상수는 이미 만들어졌으므로
str이 참조하는 인스턴스를 str2도 참조함.*/
String str1 = new String("hello");
String str2 = new String("hello");
/* 인스턴스는 무조건 새로 만들어진다.
두 번째 문장이 실행될 때도 새로 만들고, str3과 str4는 서로 다른 인스턴스를 참조
*/
String str5 = "Hello World";
String str6 = str5.substring(3);
/* String은 불변 클레스
메서드를 호출해도 내부의 값은 변하지 않고 모두 새로운 String을 생성해서 반환
*/
1. 이름과 번호를 필드로 가진 Car 클래스 선언
public class Car{
String name;
int number;
}
Car c1 = new Car();
Car c2 = new Car();
// Car라는 인스턴스가 메모리에 두 개 만들어진다.
// 객체별로 name과 number라는 필드를 가진다.
c1.name = "소방차"; // c1.name은 c1이 참조하는 객체의 name을 의미한다.
c1.number = 1234; // c1.number는 c1이 참조하는 객체의 number을 의미한다.
c2.name = "구급차";
c2.number = 1111;
System.out.println(c1.name);
System.out.println(c2.number);
사물 = 상태 + 행동
사물 = field + Method
public calss MyClass{
public 리턴형 메서드명 (매개변수들){
// 리턴형 : 메서드를 실행한 다음 결괏값을 되돌려줄 때 사용하는 자료형
실행될 코드
}
}
public class HelloWorld{ // HelloWorld 클래스 : 프로그램의 최소단위
public static void main(String args[]){
//메인 메서드 : 프로그램의 시작점
System.out.println("Hello World");
}
}