*배열
: 동일한 자료형의 데이터를 저장하기 위한 정적인 자료구조 (초기 선언 시 공간의 크기가 정해짐)

    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: 객체의 동작 담당
필수적으로 셋 다 있어야 할 필요는 없고 그때그때 필요한 것만 만들어 사용하면 됨

+ Recent posts