java의 정석 3

가변인자(varargs)와 오버로딩

기존에는 메소드의 매개변수 개수가 고정적이었으나, JDK1.5부터 동적으로 지정할 수 있으며 이를 '가변인자(variable arguments)' 라고 한다. 선언 방법 '타입... 변수명' class Test { static String something(String... args) { // to be } } 만약 여러 문자열을 하나로 결합하여 반환하는 make 메소드를 작성한다면, 아래와 같이 매개변수의 개수를 다르게 해서 여러 개의 메소드를 작성해야할 것이다. String make(String s1, String s2) { ... } String make(String s1, String s2, String s3) { ... } String make(String s1, String s2, String..

공부/Java 2022.06.12

클래스 메소드(static 메소드)와 인스턴스 메소드

변수에서 그랬던 것과 같이, 메소드 앞에 static이 붙어 있으면 클래스 메소드 붙어 있지 않으면 인스턴스 메소드이다. 그렇다면 클래스를 정의할 때, 어느 경우에 static을 사용해서 클래스 메소드로 정의해야하는 것일까? 인스턴스 메소드는 인스턴스 변수와 관련된 작업을 하는, 즉 메소드의 작업을 수행하는데 인스턴스 변수를 필요로 하는 메소드이다. 그런데 인스턴스를 생성해야만 만들어지므로 인스턴스 메소드 역시 인스턴스를 생성해야만 호출할 수 있는것이다. 반면에 메소드 중에서 인스턴스와 관계없는(인스턴스 변수나 인스턴스 메소드를 사용하지 않는) 메소드를 클래스 메소드(static메소드)로 정의한다. class MyMath2 { long a, b; // 인스턴스 변수 a, b만을 이용해서 작업하므로 매개변..

공부/Java 2022.06.12

인스턴스 변수와 클래스 변수

인스턴스 변수와 클래스 변수에 대해 포스팅 한다. 변수는 클래스변수, 인스턴스변수, 지역변수 모두 세 종류가 있다. 멤버변수를 제외한 나머지 변수들은 모두 지역변수이며, 멤버변수 중 static이 붙은 것은 클래스변수이고 붙지 않은 것은 인스턴스변수 이다. class Variables { /* 클래스 영역 */ int iv; // 인스턴스 변수 static int cv; // 클래스 변수 (static 변수, 공유 변수) void method() { /* 메소드 영역 */ int iv = 0; // 지역변수 } } 변수의 종류 선언위치 생성시기 클래스 변수 (class variable) 클래스 영역 클래스가 메모리에 올라갈 때 인스턴스 변수 (instance variable) 인스턴스가 생성되었을 때 지..

공부/Java 2022.06.12