1. 매개변수 전달방식
1) call by value
=> 메소드의 매개변수가 value 형인 경우
=> 호출할 때 넘어온 데이터를 변경할 수 없다.
2) call by reference
=> 메소드의 매개변수가 reference 형인 경우
=> 호출할 때 넘어온 데이터를 변경할 수 있다.
3) call by reference 보다는 call by value가 바람직
2. Method Overloading(중복정의)
=> 하나의 클래스에 동일한 이름의 메소드가 2개 이상 존재하는 경우
=> 매개변수의 개수나 자료형은 달라야 합니다.
=> 유사한 역할(동일한 알고리즘)을 수행하는 메소드의 이름을 동일하게 만들기 위해서 사용
3. 가변인자
=> 매개 변수의 개수가 정해지지 않은 방식
=> 메소드를 호출할 때 자료형의 데이터를 개수에 상관없이 대입 가능
=> 메소드 내부에서는 배열로 처리
=> java 1.5 이상에서 사용 가능
=> 자로형 ... 매개변수 이름
4. 생성자(Constructor)
=> 인스턴스를 생성할 때 호출하는 메소드
* 생성자 규칙
1) 이름은 반드시 클래스 이름과 동일
2) 리턴타입은 없음
3) 오버로드 가능
4) 클래스를 만들면 기본적으로 매개변수가 없는 생성자가 제공되고 생성자를 만들면 제공되는 생성자는 소멸
* 생성자를 만드는 이유
1) 인스턴스가 생성될 때 수행해야 할 작업이 있는 경우
2) 인스턴스 변수 초기화 해야 하는 경우
* 생성자 이름
1) default constructor
=> 매개변수가 없는 생성자
2) 복사생성자
=> 자신의 자료형과 동일한 원형의 데이터를 매개변수로 갖는 생성자
public class Main1 {
public static void main(String[] args) {
//MethodTest에서 생성자를 만들지 않았기 때문에
//객체를 생성하는 방법은 한가지 이고 모든 인스턴스 변수는
//기본값 (0,0.0,flase,null)로 초기화
MethodTest ob1= new MethodTest();
MethodTest ob2= new MethodTest();
MethodTest ob3= new MethodTest(4);
System.out.println("ob1:"+ob1.getNum());
System.out.println("ob2:"+ob2.getNum());
System.out.println("ob2:"+ob3.getNum());
}
}
public class MethodTest {
//객체에 일련번호를 저장하기 위한 변수
private int num;
private static int autoinc; //계속 사용
//매개변수가 없는 생성자 - Default Construction
// public MethodTest() {
// //num=1;
// }
//
public MethodTest() {
autoinc = autoinc + 1;
num = autoinc;
}
//정수 1개를 받아서 num에 대입하는 생성자
//생성자 오버로딩
//이렇게 생성자를 오버로딩하면 인스턴스를 만드는 방법이 2개가 된다.
public MethodTest(int n) {
num=n;
}
//인스턴스 변수를 만들 때는 private으로 접근지정자를 만들기 때문에
//인스턴스가 접근할 수 없습니다.
//인스턴스가 인스턴스변수를 접근하기 위한 메소드를 만들어서 사용해야 합니다.
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
//매개변수가 정수인 메소드
//매개변수의 데이터를 1 증가시키는 메소드
public void callByValue(int n) {
n=n+1;
}
}
5. 초기화 블럭
1) static 블럭
static {
내용;
}
=> 클래스가 호출될 때 1번만 수행
=> 인스턴스 변수 사용은 안함
2) instance 초기화 블럭
{
내용;
}
=> 인스턴스가 생성될 때 new 마다 수행
public class Main3 {
public static void main(String[] args) {
//ClassTest 클래스의 add 메소드 호출
//static이 붙은 메소드는 클래스 이름으로 호출
int t = ClassTest.add(10, 20);
System.out.println("main결과: "+t);
//ClassTest 클래스의 isAdd 메소드 호출
//인스턴스를 생성
ClassTest ob1 = new ClassTest();
ob1.isAdd(40);
ClassTest ob2 = new ClassTest();
}
}
public class ClassTest {
//class: 사용자 정의 자료형
//사용자가 임의로 메소드와 변수 등을 하나로 묶어둔
//구성요소: 생성사, 변수, 메소드
//static 변수는 하나만 만들어서
//클래스와 인스턴스가 공유
private static int st;
//인스턴스가 각각 소유
private int is;
//정수 2개를 매개변수로 받아서 더한 결과를 리턴하는 메소드
public static int add(int a, int b) {
return a+b;
}
//정수 1개를 받아서 is와 더한 결과를 출력하는 메소드
public void isAdd(int n) {
is = is +n;
System.out.println("결과: "+is);
}
//static 초기화
static {
System.out.println("클래스가 호줄될 때 한 번만 수행");
}
//초기화
{
System.out.println("인스턴스가 생성될 때 마다 수행 ");
}
}
6. Recursive call (재귀호출) or recursion
=> 메소드가 자기 자신을 다시 호출하는 것
=> 코딩을 간결하게 하기 위해서 사용
=> 메소드의 수행이 중지되기 전에 메소드를 호출하기 때문에 메모리 사용량이 많고 속도도 느릴 수 있다.
ex) 1부터 10까지의 합 -> 10 + 9까지의 합 -> 10+9+8까지의 합 -> 10+9+8+7까지의 합
합, 팩토리얼, 피보나치수열, 하노이의 탑 등
public class Main2 {
public static void main(String[] args) {
InitTest it1 = new InitTest();
InitTest it2 = new InitTest();
System.out.println();
RecursiveTest r = new RecursiveTest();
System.out.println(r.sum(10));
System.out.println(r.fac(6));
System.out.println(r.fibonacci(8));
}
}
public class InitTest { //얘는 초기화 알아보는 클래스
static {
System.out.println("안녕");
}
{
System.out.println("hello");
}
}
7. this
=> 인스턴스 메소드에 숨겨진 첫번째 매개변수
=> 인스턴스 메소드를 호출할 때 인스턴스에 참조가 this에 전달
=> static method 에서 사용 x
this 를 사용하는 경우
=> 인스턴스 메소드에서 지역변수와 인스턴스의 이름이 같을때, 인스턴스 변수를 가리키기 위해서 사용
8. Garbage Collection
=> heap 메모리를 자동으로 정리해주는 자바 프로그램
=> 일정시간이 지나거나 메모리가 부족하면 자동호출
=> heap 의 영역 중 가리키고 있는 것이 없으면 정리
9. Package
=> 관련있는 클래스의 집합 - 디렉토리와 유사
=> java에서는 jar 이라고 하는 압축 형식으로 제공
=> 패키지 안에 클래스가 만들어지면 클래스 이름 앞에 패키지 이름이 붙습니다.
=> 패키지 이름은 소문자
=> 패키지 이름은 도메인을 역순으로 쓰고 프로젝트 이름을 기재
10. Import
=> 패키지 이름을 생략하고 클래스를 사용하기 위한 개념
1) import 패키지이름.*;
2) import 패키지이름.클래스이름;
java.util
java.lang
'IT > JAVA (17.12.18~)' 카테고리의 다른 글
11일차 JAVA(11) (0) | 2018.01.03 |
---|---|
10일차 JAVA(10) (0) | 2018.01.02 |
8일차 JAVA(8) (0) | 2017.12.28 |
7일차 JAVA(7) (0) | 2017.12.27 |
6일차 JAVA(6) (0) | 2017.12.26 |