*배열
: 동일한 자료형의 데이터를 저장하기 위한 정적인 자료구조 (초기 선언 시 공간의 크기가 정해짐)
int[] score = new int[3];
자료형 배열변수 연산자 배열의 크기(=방의 갯수)
new-> heap 메모리에 int형 배열 3개를 새로 생성한다는 의미
그렇게 heap에 생성된 3개짜리 배열의 변수명이 score인 것이고
stack에 존재하는 score에는 배열 시작 주소가 저장되어있음
*변수
지역변수(Local variable) : 스택 영역에 저장
1.메소드 안에서 정의 되는 변수
2.매개 변수(parameter) : 메소드 괄호안에서 사용되는 변수
3.블럭문(조건문,반복문) 안에서 사용되는 변수
-> 해당 메소드가 호출될때 스택 메모리에 할당되고, 메소드
실행이 종료되면 자동으로 메모리가 해제된다.
** 자바는 중첩 메소드를 허용하지 않음- 메소드 안에 메소드를 넣는 것 불가능
자료형으로 메소드를 선언한 경우 반드시 리턴값이 필요, void인 경우는 생략 가능하지만.
*
public static void main(String[] args) <-여기서 String[] args 알아보자
public static void main(String[] args) {
// args[0]="-10";
System.out.println("args[0]: "+args[0]);
int num= Integer.parseInt(args[0]);
System.out.println("절대값: "+abs(num));
}
args[0]="-10"; //string이라 문자형으로 -10 할당
int num= Integer.parseInt(args[0]); // 문자형을 정수형으로 변환
abs(num)으로 int형 변환한 args[0] 값을 abs 메소드로 넘겨 계산 후 값을 return해 받음
※근데!!!! 이대로 ctrl+F11 써서 실행하면 오류 뜸
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
배열의 크기를 벗어났다고 뜬다
해결법
Run-> Run Configurations -> Arguments
Program arguments에 -10 (값) 삽입
=> 이래야 String args[] 배열이 값을 인식하고 문자 "-10"을 args[0]에 할당 (물론 값은 heap 메모리에 저장된 상태)
-10 -20 50 30 .... 이렇게 넣어주면 차례대로 args[0][1][2][3]에 들어가게 됨
+) 콘솔창으로 실행할 경우
c:\java ArrayEx07 -10 -20 50 30 <-이렇게 따로 넣어줘야 함
*Wrapper 클래스 (java.lang.* 에 속해있으므로 따로 import 시켜주지 않아도 됨)
위의 코드에서처럼 자료형변환을 해야할 때 씀
(값이 변환되어질 데이터형)
자바의 기본 데이터형 Wrapper 클래스
boolean Boolean
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
args[0]="-10";
int num= Integer.parseInt(args[0]); //괄호 안에는 반드시 String이어야 함
클래스 메소드(parseInt 메소드에서 args[0]를 int로 바꿔주고 값을 return받음)
(각 자료형들이 제공은 되지만 거의 int형만 쓴다. Integer가 중요 - 90%이상 Integer 사용)
* 2차원 배열
int[][] score = new int[5][3];
자료형 배열변수 연산자 [5]:행
[3]:열
-> 5층 건물, 3호까지 있는. 총 5*3=15개의 값을 저장할 수 있는 기억 공간이 생성됨
int [][] score = { { 85, 60, 70}, //0 행
{ 90, 95, 80}, //1 행
{ 75, 80, 100}, //2 행
{ 80, 70, 95}, //3 행
{100, 65, 80} }; //4 행
한번에 다 선언해야 하는 경우 하나하나 지정하기보다는 이런 식으로 하는게 그나마 편할듯
*String 타입
: 문자열을 저장하는 클래스타입
1.
String name1="가나다";
String name2="가나다";
문자열 리터럴(문자열 그 자체가 값을 나타내는 것) 동일한 경우 String 객체(heap메모리) 공유
2.
String name1=new String("가나다");
String name2=new String("가나다");
heap 메모리 영역에 새로운 객체를 생성해 값을 저장하고 주소를 리턴시키는 방식일 경우 같은 값을 가지고 있어도 각자가 다른 주소-> 다른 heap메모리 공간에 저장됨
== : String 값이 저장된 '주소'를 비교함 -> stack에 존재하는 값을 비교
.equals() : String에 저장된 '값'을 비교함 -> heap에 존재하는 값을 비교
ㄴ> boolean형이므로 같으면 true, 다르면 false를 리턴
즉 if(str1.equals(str2)) 을 놓았을때 true,false로 리턴되어 조건문 성립하는 것
멤버변수(전역 변수, field) : heap메모리 영역에 저장
: 메소드 바깥쪽에 정의 되는 변수
1.멤버변수는 heap메모리 영역에 저장됨.
2.클래스(생성자, 메소드) 안에서 모두 사용이 가능함
3.참조형(클래스,배열,인터페이스)을 이용해서 new연산자로
객체를 생성할때 heap메모리 영역에 새로운 공간을 할당 받는다.
-> 지역변수는 속한 메소드 실행이 끝나면 메모리가 사라지는데 멤버변수는 메소드 밖에 있으므로 따로 사라지지 않음
heap 영역에 선언된 변수들은 초기값이 자동으로 0이 됨 (배열과 똑같이)
*생성자
반드시 클래스명과 같아야 하고 괄호도 필요함, 앞에 접근제어자 있을 수 있고.
기본생성자(Default Constructor): 매개변수(메소드 괄호 안에 사용되는 변수) 없는 생성자
String str=new String(); 에서 String()이 생성자임 생성자로 heap메모리에 String형 영역을 선언하면 연산자 new로 그 주소를 리턴해 변수 str에 할당해주는 것임
정리
String()은 생성자를 호출하는 코드고 생성된 객체가 heap 메모리 영역에 생성됨
new는 명시적으로 heap 메모리에 영역을 할당하겠다는 의미고 객체 생성 후 그 주소를 리턴함
변수 str에는 값이 아니라 heap 메모리의 주소가 할당되게 됨
*객체
: 물리적으로 존재하는 것, 추상적인 것 중 자신의 속성과 동작을 가지는 모든 것
사람
속성: 이름, 나이
동작: 웃다, 울다
자동자
속성: 색깔, 속도
동작: 달린다, 멈춘다
여기서 속성 -----> 필드 (객체를 구성하는 근본적인 부분- 이름 생일 나이 혈액형.. 고유한 특성)
동작 -----> 메소드 (객체가 하는 행동- 사람이 웃지 않는다고 사람이 아닌건 아니니까)
캡슐화
: 객체의 필드, 메소드를 하나로 묶고 실제 구현 내용을 감춤
: 자바 언어는 캡슐화된 멤버를 노출시킬것인지 숨길것인지 결정하기 위해 접근제한자(private 등) 사용
(ex. 개인 정보 입력해놓고 타인은 개인 정보 중 닉네임만 볼수 있게 제한시켜놓는 그런거)
상속
: 상위 객체의 필드와 메소드를 하위 객체에게 물려주는 행위, 하위 객체는 상위 객체에 확장해 추가적으로 필드와 메소드를 가질 수 있음
다형성
: 같은 타입이지만 실행 결과가 다양한 객체를 대입할 수 있는 성질
: 객체를 부품화시켜 유지보수가 용이함
객체와 클래스
설계도 -> 객체 에서 클래스가 설계도의 역할을 함
클래스에는 객체를 생성하게 위한 필드와 메소드가 정의되어있음
클래스 구성
필드Field: 객체의 데이터가 저장되는 곳
-> 객체의 고유 데이터, 객체가 가져야할 부품 객체, 현재 상태 데이터
생성자Constructor: 객체 생성시 초기화 역할
메소드Method: 객체의 동작 담당
필수적으로 셋 다 있어야 할 필요는 없고 그때그때 필요한 것만 만들어 사용하면 됨
'수업 > 정리' 카테고리의 다른 글
211231 Instance, Static, Singleton (0) | 2021.12.31 |
---|---|
211230 객체, 클래스, 생성자 (0) | 2021.12.30 |
211228 메소드 호출, 데이터타입 자료형, 참조형:배열-1 (0) | 2021.12.28 |
211227 반복문(for, while, do while), 보조제어문(break, continue) (0) | 2021.12.27 |
211223 연산자, 제어문-조건문if, switch, 반복문-for (0) | 2021.12.23 |