자바의정석
6 posts
제어자

클래스, 변수, 메소드의 선언부에 함께 사용되어 부가적인 의미를 부여한다. 제어자는 접근 제어자와 그 외 제어자로 나눌 수 있는데, 접근 제어자는 선언부에 하나만 쓸 수 있으며, 그 외 제어자는 조합하여 사용이 가능하다. static - 클래스의, 공통적인 static이 사용될 수 있는 곳 : 멤버변수, 메소드, 초기화 블럭 멤버변수에 static이 붙는다면 모든 인스턴스에 공통적으로 사용되는 클래스 변수며, 인스턴스를 생성하지 않고도 사용이 가능하다. 클래스가 메모리에 로드될 때 생성된다. 메소드에 static이 붙는다면? 인스턴스를 생성하지 않고도 사용 가능한 클래스 메소드가 된다. 클래스 메소드 내에서는 인스턴스 멤버들을 사용할 수 없다. final - 마지막의, 변경될 수 없는 final이 사용될 수 있는 곳 : 클래스, 메소드, 멤버변수, 지역변수 클래스에 final이 붙는다면 확장될 수 없다. 즉 다른 클래스의 조상이 될수 없고 상속 구조에서 제일 마지막 클래스이다. 메…

June 13, 2023
자바
자바의정석
상속

상속 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것 상속을 받는다는 것은 상위 클래스를 확장(extends)한다는 의미로 해석된다. 하위 클래스는 상위클래스의 생성자, 초기화 블럭을 제외한 모든 멤버를 모두 상속받는다. 상위 클래스가 변경되면 모든 하위 클래스는 자동으로 영향을 받지만, 하위 클래스가 변경되는 것은 상위 클래스에 아무런 영향이 없다. 포함관계 상속 이외에도 클래스를 재사용하는 다른 방법, 한 클래스의 멤버변수로 다른 클래스 타입의 참조 변수를 선언하는 것 단일상속 자바에서는 단일 상속만 허용한다. Object 클래스 Object 클래스는 모든 클래스의 상위 클래스이다. 다른 클래스로부터 상속 받지 않는 모든 클래스들은 자동으로 Object 클래스를 상속받는다. 오버라이딩 상위 클래스로부터 상속받은 메소드의 내용을 변경하는 것, 상속받은 메소드를 그대로 사용하기도 하지만 필요에 따라 변경을 해야하는 경우 상위 클래스의 메소드를 오버라이딩 한다. 오버라이딩의 …

June 03, 2023
자바
자바의정석
생성자

인스턴스가 생성될 때 호출되는 인스턴스 초기화 메소드 생성자의 조건 생성자의 이름은 클래스 이름과 같아야 한다. 생성자는 리턴값이 없다 생성자의 정의 생성자도 오버로딩이 가능하므로 하나의 클래스의 여러개의 생성자가 존재할 수 있다. 연산자 new에 의해서 메모리에 Card 클래스의 인스턴스가 생성된다. 생성자 Card()가 호출되어 수행된다. 인스턴스를 생성할 때 반드시 클래스 내에 정의된 생성자 중 하나를 선택하여 지정해주어야 한다. 기본생성자 컴파일할 때 클래스에 생성자가 하나도 정의되어 있지 않은 경우 컴파일러는 자동으로 기본 생성자를 추가하여 컴파일한다. 컴파일러가 자동 추가해주는 기본생성자는 매개변수와 내용이 없다. 매개변수가 있는 생성자 매개변수가 있는 생성자를 사용한다면 인스턴스를 생성하는 동시에 원하는 값으로 초기화 할 수 있다. 생성자에서 다른 생성자 호출하기 조건 생성자의 이름으로 클래스이름 대신 this를 사용한다. 반드시 첫 줄에서만 호출이 가능하다. 기본…

May 29, 2023
자바
자바의정석
클래스, 메소드, 변수, 인스턴스, 객체

클래스 클래스란 객체를 정의해 놓은 것이며, 객체를 생성하는데 사용된다. 클래스를 잘 만들어 놓으면 객체를 생성할 때마다 고민을 할 필요가 없으며, 만들어 놓은 클래스로부터 객체를 생성해서 사용하기만 하면 된다. 우리는 JDK에서 제공하는 클래스들을 이용해서 쉽게 프로그램을 작성할 수 있다. 클래스의 또 다른 정의 데이터와 함수의 결합 함수와 데이터는 관계가 깊기 때문에 자바에서는 변수와 함수를 하나의 클래스에 정의하여 관계가 깊은 변수와 함수를 함께 다룰 수 있게했다. 사용자 정의 타입 사용자 정의 타입은 사용자가 기능 동작을 위한 데이터와 함수를 묶어서 정의하는 것이다. 객체 객체는 클래스의 정의된 내용대로 메모리에 생성된 것이다. 클래스로부터 객체를 만드는 것을 클래스의 인스턴스화라고 하며, 어떤 클래스로부터 만들어진 객체를 그 클래스의 인스턴스라고 한다. 객체는 포괄적인 의미를 가지고 있다면, 인스턴스는 객체보다 구체적인 의미인 어떤 클래스로부터 만들어진 것인지를 …

May 27, 2023
자바
자바의정석
재귀호출

메소드 내부에서 메소드 자신을 다시 호출하는 것 어떻게 메소드가 자기 자신을 호출할 수 있는걸까? 메소드 입장에서는 자기 자신을 호출하는 것과 다른 메소드를 호출하는 것은 차이가 없다. ‘메소드 호출’ 이라는 것이 특정 위치에 저장되어 있는 명령들을 수행하는 것일 뿐이기 때문 호출된 메소드는 원래의 값이 아닌 복사된 값으로 작업하기 때문에 호출한 메소드와 관계없이 독립적인 작업 수행이 가능하다 : 재귀호출과 반복문 재귀호출은 반복문과 유사한 점이 많으며, 대부분의 재귀호출은 반복문으로 작성하는것이 가능하다. 어떤 작업을 반복적으로 처리해야한다면, 먼저 반복문으로 작성해보고 너무 복잡하다면 재귀호출로 간단하게 할 수 없는지 고민해봐야한다. 반복문보다 재귀호출이 비효율적이므로 재귀호출에 드는 비용보다 재귀호출의 간결함이 주는 이득이 충분히 큰 경우에만 사용해야한다. 대표적인 재귀호출 : 팩토리얼 팩토리얼은 한 숫자가 1이 될 때까지 1씩 감소시켜가면서 계속해서 곱해 나가는 것 …

May 27, 2023
자바
자바의정석
기본형 매개변수와 참조형 매개변수 / 참조형 반환타입

매개변수의 타입이 기본형일 때는 값이 복사되어서 변수의 값을 읽는 것만 가능하다. 참조형일 때는 인스턴스의 주소가 복사되어서 변수의 값을 읽고 변경할 수 있다. 기본형 매개변수 호출한 메소드에 기본형 매개변수가 선언되어 있는 경우 인자(d.x)의 값을 복사하여 넘겨준 것 호출한 메소드에서 값을 1000으로 변경하더라도 호출한 메소드의 매개변수 값만 변경 될 뿐, 인자로 넘겨준 변수는 영향을 받지 않는다. 참조형 매개변수 호출된 메소드에 참조형 매개변수가 선언되어 있는 경우 값이 저장된 주소를 호출된 메소드에 넘겨준다. 호출된 메소드의 매개변수가 넘겨받은 인자와 같은 주소값을 가리키고 있기 때문에 호출된 메소드에서 값을 변경하게되면 그 주소값을 가지고 있는 변수의 값이 변경된다. 참조형 반환타입 copy메소드에서 생성한 객체를 main메소드에서 사용하려면 copy메소드 내에서 생성한 객체의 주소를 반환해주어야 한다. 그렇지 않으면 copy메소드가 종료되면서 생성한 객체의 참…

May 24, 2023
자바
자바의정석