JAVA/객체지향프로그래밍1 17

[JAVA] 변수의 초기화

변수의 초기화 - 변수를 선언하고 처음으로 값을 저장하는 것 - 멤버변수(인스턴스변수,클래스변수)와 배열은 각 타입의 기본값으로 자동초기화되므로 초기화를 생략할 수 있다. - 지역변수는 사용전에 꼭!!! 초기화를 해주어야한다. 인스턴스 변수 x는 초기화를 해주지 않아도 자동적으로 int형의 기본값인 0으로 초기화되므로, 'int y= x' 와 같이 할 수 있다. x의 값이 0이므로 y역시 0이 저장된다. 하지만 method1()의 경우, 지역변수는 자동적으로 초기화되지 않으므로, 모르는 i의 값을 j에 넣으려고 하다보니 에러. 멤버변수(클래스변수와 인스턴스변수)와 배열의 초기화는 선택적이지만, 지역변수의 초기화는 필수적이다. 각 타입의 기본값 ▶멤버변수의 초기화 방법 1. 명시적 초기화(explicit ..

[JAVA] 생성자 this() / 참조변수 this

생성자 this() 생성자, 같은 클래스의 다른 생성자를 호출할 때 사용 (같은 클래스 안에 있는 생성자를 호출할 때는 클래스 이름 대신 this 사용) -다른 생성자 호출 시 첫 줄에서만 가능 생성자에서 다른 생성자를 첫 줄에서만 호출 가능하도록 한 이유는 생성자 내에서 초기화 작업 도중에 다른 생성자를 호출하게 되면, 호출된 다른 생성자 내에서도 멤버변수들의 값을 초기화할 것이므로 다른 생성자를 호출하기 이전의 초기화 작업이 무의미해질 수 있기 때문이다. 예25) class Car1 { String color; String geartype; int door; Car1() { this("white", "auto", 4); } Car1(String color) { this(color, "auto", 4)..

[JAVA]매개변수가 있는 생성자

매개변수가 있는 생성자 Car 인스턴스를 생성할 때, 생성자 Car()를 사용하면, 인스턴스를 생성한 다음에 인스턴스 변수들을 따로 초기화해주어야하지만, 매개변수가 있는 생성자 Car(String c, String g, int d)를 사용하면 인스턴스를 생성하는 동시에 원하는 값으로 초기화를 할 수 있게 된다. 1. 참조변수 생성 2. new 연산자가 객체 만든다 3. 생성자 호출되면서 객체 초기화 4. 참조변수 안에 저장 예24) class Car { // 필드 생성 String color; String geartype; int door; //생성자 생성 // 기본 생성자 Car() { } // 매개변수가 있는 생성자 Car(String c, String g, int d) { color = c; gea..

[JAVA] 기본 생성자(default constructor)

기본 생성자란? - 매개변수가 없는 생성자 - 클래스에 생성자가 하나도 없으면 컴파일러가 기본 생성자를 추가한다. (생성자가 하나라도 있으면 컴파일러는 기본 생성자를 추가하지 않는다.) “모든 클래스에는 반드시 하나 이상의 생성자가 있어야 한다.” 특별히 인스턴스 초기화 작업이 요구되지 않는다면, 생성자를 정의하지 않고 컴파일러가 제공하는 기본 생성자를 사용하는 것도 좋다. 예23) class Data1 { int value; } class Data2 { int value; Data2(int x) { int value; } } public class ConstructorTest { public static void main(String[] args) { Data1 d1 = new Data1(); Data..

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

가변인자(varargs)와 오버로딩 기존에는 메서드의 매개변수가 고정적이었으나 JDK1.5부터 동적으로 지정해줄 수 있게 되었으며, 이 기능을 '가변인자(variable arguments)'라 한다. 가변인자는 '타입...변수명' 과 같은 형식으로 선언하며, PrintStream 클래스의 printf() 가 대표적이다. public PrintStream printf(String format, Object...args){...} 가변인자 외에도 매개변수가 더 있다면, 가변인자를 매개변수 중에서 제일 마지막에 선언해야한다. 그렇지 않으면 컴파일 에러가 발생한다. 가변인자인지 아닌지를 구별할 방법이 없기 때문에 허용하지 않는 것이다. //컴파일 에러 발생-가변인자는 항상 마지막 매개변수이어야한다. public..

[JAVA] 오버로딩(overloading)

1. 오버로딩(overloading)이란? 하나의 클래스에 같은 이름의 메서드를 여러 개 정의하는 것. 2. 오버로딩이 성립하기 위한 조건 1. 메서드의 이름이 같아야한다. 2. 매개변수의 개수 또는 타입이 달라야한다. 3. 반환 타입은 영향 없다. 3. 오버로딩의 예 대표적인 예) println println메서드를 호출할 때 매개변수로 지정하는 값의 타입에 따라서 호출되는 println 메서드가 달라진다. 컴파일러가 매개변수 타입을 확인해서 거기에 맞는 메소드를 연결한다. 예) ▶ 매개변수의 이름이 다른 것은 오버로딩이 아니다. (메서드 중복 정의) ▶ 리턴타입은 오버로딩의 성립조건이 아니다. (중복 정의) ▶ 매개변수의 타입이 다르므로 오버로딩이 성립한다. 만약 add(3,3)을 호출하면 둘 중 어..

[JAVA] 클래스 메서드(static 메서드 )와 인스턴스 메서드

1. 클래스메서드(static메서드)와 인스턴스메서드 인스턴스 메서드는 인스턴스 변수와 관련되 작업을 하는, 즉 메서드의 작업을 수행하는데 인스턴스를 필요로하는 메서드다. 인스턴스와 관계없는(인스턴스 변수나 인스턴스 메서드를 사용하지 않는)메서드를 클래스 메서드(static 메서드)로 정의한다. ->인스턴스 변수를 사용하느냐 하지 않느냐 유무로 구분 ▶ 인스턴스메서드 - 인스턴스 생성 후, ‘참조변수.메서드이름()’으로 호출 - 인스턴스변수나 인스턴스메서드와 관련된 작업을 하는 메서드 - 메서드 내에서 인스턴스변수 사용가능 ▶ 클래스메서드(static메서드) - 객체생성없이 ‘클래스이름.메서드이름()’으로 호출 예) Math.random() , Math.round() - 인스턴스변수나 인스턴스메서드와 관..

[JAVA] 참조형 반환타입

매개변수 뿐만 아니라 반환타입도 참조형이 될 수 있다. 반환타입이 참조형이라는 것은 반환하는 값의 타입이 참조형이라는 얘긴데, 모든 참조형 타입의 값은 '객체의 주소'이므로 그저 정수값이 반환되는 것일 뿐 특별할 것이 없다. 예14) public class ReferenceReturnEx { public static void main(String[] args) { Data3 d = new Data3(); d.x = 10; Data3 d2 = copy(d); // copy 메소드 실행 System.out.println("d.x=" + d.x); System.out.println("d2.x=" + d2.x); } static Data3 copy(Data3 d) { Data3 tmp = new Data3();..

[JAVA]기본형 매개변수와 참조형 매개변수

기본형 매개변수와 참조형 매개변수 ▶ 기본형 매개변수 – 변수의 값을 읽기만 할 수 있다.(read only) ▶ 참조형 매개변수 – 변수의 값을 읽고 변경할 수 있다.(read & write) 예9) //기본형 매개변수 public class PrimitiveParamEx { public static void main(String[] args) { Data d = new Data(); d.x = 10; // 참조변수 d를 통해 x에 10 저장 System.out.println("main() : x=" + d.x); change(d.x); // x의 값을 change에 복사 System.out.println("After change(d.x)"); System.out.println("main():x=" +..

[JAVA] 호출 스택(call stack)

JVM메모리 구조 ▶ 메서드영역(Method Area) - 클래스 정보와 클래스변수가 저장되는 곳 ▶ 호출스택(Call Stack) - 메서드의 작업공간. 메서드가 호출되면 메서드 수행에 필요한 메모리공간을 할당받고 메서드가 종료되면 사용하던 메모리를 반환한다. ▶ 힙(Heap) - 인스턴스가 생성되는 공간. new연산자에 의해서 생성되는 배열과 객체는 모두 여기에 생성된다. -메서드가 호출되면 수행에 필요한 만큼의 메모리를 스택에 할당받는다. -메서드가 수행을 마치고 나면 사용했던 메모리를 반환하고 스택에서 제거된다. -호출스택의 제일 위에 있는 메서드가 현재 실행 중인 메서드이다. -아래에 있는 메서드가 바로 위의 메서드를 호출한 메서드이다. 예7) public class CallStackTest {..