전체 글 70

[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] 생성자(Constructor)

생성자(Constructor)란? - 인스턴스가 생성될 때마다 호출되는 ‘인스턴스 초기화 메서드’ -인스턴스 생성시 수행할 작업(iv 초기화)에 사용 -모든 클래스는 반드시 생성자를 가져야한다. 초기화: 객체 만들고 원하는 값 세팅 ▶ 생성자의 조건 - 생성자의 이름은 클래스의 이름과 같아야 한다. - 생성자는 리턴값이 없다. (하지만 void를 쓰지 않는다.) 생성자의 이름은 클래스 이름과 같다. 같은 클래스 내의 모든 생성자들은 이름이 같다. Card 생성자 오버로딩되었음 연산자 new가 인스턴스를 생성하는 것이다. 생성자가 인스턴스를 생성하는 것이 아니다.

카테고리 없음 2021.06.21

[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] 재귀 호출(recursive call)

재귀호출(recursive) - 메서드 내에서 자기자신을 반복적으로 호출하는 것 - 재귀호출은 반복문으로 바꿀 수 있으며 반복문보다 성능이 나쁨 - 이해하기 쉽고 간결한 코드를 작성할 수 있다 재귀호출을 하는 메서드를 '재귀 메서드' 라 한다. 호출된 메서드는 '값에 의한 호출(call by value)' 을 통해, 원래의 값이 아닌 복사된 값으로 작업하기 때문에 호출한 메서드와 관계없이 독립적인 작업 수행이 가능하다. 그런데 위처럼 오로지 재귀호출뿐이면, 무한히 자기 자신을 호출하기 때문에 무한 반복에 빠지게 된다. 무한 반복문이 조건문과 함께 사용해야하는 것처럼 재귀호출도 조건문이 같이 나와야한다. 매개변수 n을 1씩 감소시켜가면서 재귀호출을 하다가 n의 값이 0이 되면 재귀호출을 중단한다. 반복문으..

카테고리 없음 2021.06.20

[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();..