211228 메소드 호출, 데이터타입 자료형, 참조형:배열-1
메소드 호출
메인 메소드 뿐 아니라 사용자가 필요한 메소드를 직접 호출해 사용하는 방법.
메소드
다른 언어(C,python,javascript)에서는 함수라고 불리기도 함
자료형의 값을 main에서 지정해 호출시키는 경우 Call by Value
참조형의 주소값을 불러오는 경우 Call by Reference
그동안 사용한건 main 메소드 -> 자바에서 가장 먼저 호출시키는 메소드!
한개의 클래스가 독립적으로 실행되기 위해서는 main메소드가 필요함.
이번엔 기존 main 메소드 안에 다 집어넣는게 아니라 사용자 정의 메소드를 따로 호출해 사용할 것.
메소드란?
1. 여러가지 코드를 모아놓은 것
2. 코드를 재사용하기 위해 메소드를 사용.
컴퓨터 프로그램에 필수적으로 사용되는 것
1. 변수 2. 메소드(=함수)
= 데이터를 효율적으로 사용하기 위해 사용함.
접근제어자 void or
(접근지정자) 공유 자료형 메소드명(매개변수)
public static void check(){
(static이 붙었다면: 정적메소드)
return 값; // 자료형에 맞는 값을 리턴해 돌려줘야함, void는 리턴 생략 가능
}
cf. 접근 제어자
public, 생략(default접근제어자), private, protected
//아무것도 붙이지 않은 경우 디폴트
클래스: 필드, 생성자, 메소드(함수) 로 구성됨
메소드 호출을 숙지해야 하는 이유: 나중에 클래스 따로 분리해 작업하고 그 클래스 내용 실행시킬 때 필요함
*데이터타입
기본 자료형 : 수치(정수, 실수), 문자(char), 논리(boolean)
참조형(Reference Type) : 클래스, 배열, 인터페이스(Collection)
ex) String s1 = "50";
String s2 = new String("자바");
값은 heap에 저장, 주소는 stack에 저장 후 호출할 때 stack의 주소를 불러오는 형식.
JVM이 사용하는 메모리 영역
메소드: 공유를 위한 영역 - 모든 스레드가 공유
힙: 객체, 배열 저장
스택: 스레드 별 생성, 메소드 호출 시 스택에 추가(push)되고 메소드 종료되면 Fame 제거(pop)
String: 문자열 저장하는 클래스 타입
배열: 같은 타입 데이터를 연속된 공간에 저장하는 정적인(정해진) 자료구조, 변수가 확장된 개념
변수 -> 배열(동일한 자료형만 저장, ex.int a[]는 int형만 저장 가능) -> List(모든 자료형 저장)
- 1차원 배열
선언 형식
1. 값이 정해져있지 않을 때 //참조형 대부분 이 형식을 따름
int[] score = new int[3]; // 이 시점에서 배열 내 초기값(in heap)은 전부 0이 됨
자료형 배열변수 연산자 배열 크기(=개수)
score[0]=80;
score[1]=90;
score[2]=100;
stack에 변수 score의 주소가 들어있고 heap에 배열에 대입한 값이 들어있음
2. 값이 정해져있을 때 (바로 초기값으로 대입)
int [] score={80.90.100};
int [] score=new int[]{80,90,100};
String[] str={"java","자바"};
String[] str=new String[]{"java","자바"};
stack에 변수 score, str의 주소가 들어있고 heap에 배열 값이 들어있음
정적인 자료구조인 이유-> 선언한 배열의 크기만큼만 값을 받을 수 있기 때문에, 유동적이지 못함
향상된(확장) for문
형식: for( 변수 : 순차적인 자료구조(배열, 컬렉션))
굳이 조건식 넣지 않아도 알아서 반복되는 장점