2020. 9. 23. 21:21ㆍ교육과정/KOSMO
키워드 : 클래스 / 멤버변수 / 로컬변수 / 기본형 / 참조형 / 스택 메모리 / 힙 메모리 / new 예약어 / 라이브러리 / 메소드 / currentTimeMillis() / String / ___.parse___() / 스와핑 / final / 프로모션 / 캐스팅 / 스캐너
*****
이클립스 실행오류가 발생할 경우
- C:\java\eclipse 내의 eclipse.ini 파일을 에디트플러스로 연다
- --launcher.appendVmargs 라고 되어 있는 단을 찾고 그 아랫줄에 스크립트를 추가한다.
-vm
-C:\java\jdk_1.8_open\bin\javaw.exe
- 추가한 스크립트 아랫줄에는 -vmargs 가 온다.
01.
● 클래스의 이름은 언제나 대문자로 시작한다. (패키지 이름은 소문자로 한다.)
● 클래스 안에는 Data(variable)와 기능(method,함수)이 들어간다.
● 동일한 Data를 계속 사용하고 싶을 때는 변수로 만들고 저장해두는게 편하다.
● 메소드 기반의 특정 함수를 호출하고자 할 때는 그 위치(주소)를 명시해주어야 한다.
▶ 블라블라.f(x)
● 주소는 4바이트의 공간을 가지며, 그 주소가 가리키는 곳에 데이터가 있는 자료 방식을 참조형이라고 한다.
(Reference Data Type)
▶ 참조 변수를 사용하는 도트연산( . )이 가능하다. String class가 가지고 있는 기능을 사용할 수 있다.
ex) studentAhn.studentName = "김철수"; | studentAhn : 참조변수 / studentName : 멤버변수
ex) System.out.println(studentAhn.getStudentName()); | studentAhn : 참조변수 / getstudentName() : 메소드
▶ String은 클래스이며 주소형을 갖기 때문에 도트 기능을 쓸 수 있다.
● 자바에서 Boolean 타입의 false는 0으로 대체되지 않는다.
● String / int / char / Boolean / double 을 비롯한 8가지 자료 기본형 타입이 있다. (PDT, Primitive Data Type)
● 기본 데이터는 도트연산( . )을 사용할 수 없으나 적합한 클래스로 가면 사용할 수 있게 된다. (wrapper 클래스)
02.
● 자바에서의 클래스가 가지고 있는 변수, 속성을 필드(field)라고 한다.
● 클래스에 있는 메소드들은 New 키워드를 사용해서 메모리로 띄워야 하지만, main 함수에 속한 자료들은 자동으로 메모리에서 활성화된다.
● Static한 자원은 new를 사용하지 않아도(객체를 생성하지 않아도), 타입선언(변수선언)을 하거나 메소드 생성(함수)만 해도 메모리에 자동으로 뜨기 때문에 클래스만으로도 사용이 가능하다.
※ 함수나 메소드가 호출되면 함수가 사용하게 될 메모리 공간이 스택(stack)에 할당된다. 스택 메모리에서는 함수가 호출되는 순서대로 공간이 생성되는데 Last in First out 방식으로 나중에 생성된 공간이 먼저 소멸한다.
※ 객체를 생성하면 힙(heap) 메모리에 공간이 할당된다. 힙 메모리는 동적 메모리이기 때문에 사용이 끝나면 메모리를 해제해 주어야 한다. C나 C++에서는 프로그래머가 직접 메모리를 해제해야 하지만, Java에서는 가비지 컬렉터가 자동으로 메모리를 해제해준다.
※ 객체마다 각각 다른 힙 메모리 공간을 차지하게 된다. 객체를 프로그래밍하기 위해 코드로 만든 클래스가 메모리에 생성된 상태를 인스턴스라고 한다.
※ 힙 메모리에 생성된 객체의 메모리 주소는 참조변수에 저장된다. 출력값은 '클래스이름@주소값'으로 나온다. 주소값은 다른 말로 해시코드(hash code) 값이라고도 하며, JVM에서 객체가 생성되었을 대 생성된 객체에 할당하는 가상 주소값이다.
● 함수(method) 밖에서 선언한 변수는 멤버변수(전역변수, 필드변수, 일반변수, member variable)이다. 필드(field)라고도 불리며 어떠한 객체(Data)를 저장하기 위한 역할을 담당한다. 필드에서 선언된 변수는 값을 할당하지 않아도 자동으로 초기값을 갖는다.
● 함수(method) 안에서 선언한 변수는 로컬변수(지역변수, local variable)이며 초기화를 하지 않으면 에러가 발생한다. (initial default 값이 없기 때문)
▶ 메소드 안에서만 만들어지고 쓰이므로, 메소드가 끝나면 변수도 소멸한다.
● (참고) 그 외에 결과값을 얻기 위해 입력값으로 주어지는 변수를 매개변수(파라미터, parameter)라고 하며, 로컬변수(local variable)에 속한다.
03.
● 컴파일시 현재 폴더가 아닌 상위 폴더의 bin 내에 .class를 생성하고자 할 때
Javac -d ../bin
● 실행시 java Sample로 실행되는 파일은 main 함수를 포함하고 있는 소스코드여야 한다.
(즉, static한 자원은 메모리에 자동으로 띄워지며, main함수의 주소가 Sample이 되는 것)
▶ Sample.main
04. 클래스에서 선언한 메소드는 new 키워드를 통해 객체를 생성해야 한다.
객체 생성을 통해 메모리로 보내지지 않으면 활성화되지 않는다.
메인 함수 내에서 선언한 변수는 디폴트 값이 없기에 초기화가 반드시 필요하며, 미초기화시 에러가 발생한다.
05. 현재 시각을 얻기 위해 라이브러리에 저장된 Date 메소드를 불러와 사용할 수 있다.
※ package 선언과 import 선언은 클래스 외부에서 한다.
- 클래스 내부에서 멤버변수를 사용하여 클래스 기능을 구현한 것을 '멤버함수' 또는 '메소드'라고 한다. ex)Date
- 패키지가 다른 메소드를 하나의 클래스 안에서 사용하고 싶을 때 import문을 통해 불러와서 사용할 수 있다.
06. 현재 시각을 얻기 위해 객체 Date를 사용할 수 있다.
06. 현재 시각을 얻기 위해 System클래스의 currentTimeMillis()를 불러와 사용할 수 있다.
★null값 할당에 대한 부분은 추가적인 확인이 필요함
07. String 변수를 선언 함수를 사용하여 그 출력값을 바꿀 수 있다.
08. new 키워드를 사용한 변수와 아닌 변수의 차이를 구분할 수 있다.
09. parse 함수 사용하여 "문자열"을 int 또는 double 타입으로 바꾸고 연산을 수행할 수 있다.
▶ Integer.parseInt() : String 타입을 Int 타입으로 변경
▶ double.parseDouble() : String 타입을 Double 타입으로 변경
10. char 타입 문자가 숫자인지 판별하는 Character.isDigit() 함수를 사용할 수 있다.
11. Math 클래스는 Static 변수와 Static 메소드이므로 객체생성(new)을 하지 않는다.
12. 스와핑 작업을 수행할 수 있다.
13. 스와핑 작업 수행시 단독 주소를 갖도록 마지막에 null 값을 대입할 수 있다.
14. final의 의미를 알 수 있다.
15. 자동 형 변환(프로모션)에 익숙해진다.
16. 명시적 형 변환(캐스팅)에 익숙해진다.
17. 스캐너 클래스를 통해 키보드 입력값을 사용할 수 있다.
18. 산술연산자를 활용할 수 있다.
19. Quiz : 클래스 실행결과가 나오도록 코드를 올바르게 수정해본다.