23.12.24 삭제예정/자바 19

클래스 메서드와 인스턴스 메서드의 이론적인 내용

변수에서 그랬던 것과 같이, 메서드 앞에 static이 붙어 있으면 클래스메서드이고 붙어 있지 않으면 인스턴스 메서드이다.클래스 메서드도 클래스변수처럼, 객체를 생성하지 않고도 '클래스이름.메서드이름(매개변수)'와 같은 식으로 호출이 가능핟. 반면에 인스턴스 메서드는 반드시 객체를 생성해야 만 호출할 수 있다.그렇다면 클래스를 정의할 때, 어느 경우에 static을 사용해서 클래스 메서드로 정의해야 하는 것일까?클래스는 '데이터(변수)와 데이터에 관련된 메서드의 집합'이므로, 같은 클래스 내에 있는 메서드와 멤버변수는 아주 밀접한 관계가 있다.인스턴스 메서드는 인스턴스 변수와 관련된 작업을 하는 , 즉 메서드의 작업을 수행하는데 인스턴스 변수를 필요로 하는 메서드이다. 그런데 인스턴스 변수는 인스턴스(객..

기본형 매개변수와 참조형 매개변수의 차이점

12345678910111213141516171819202122232425 class ReturnTest { public static void main(String[] args) { ReturnTest r = new ReturnTest(); int result = r.add(3, 5); System.out.println(result); int[] result2 = { 0 };// new int [] {0};을 축약하면 {0}으로 변경이 가능하다. r.add(3, 5, result2); System.out.println(result2[0]); } int add(int a, int b) { return a + b; } void add(int a, int b, int[] result) { result[0] =..

배열 메소드의 소환

1234567891011121314151617class referenceParamEx2 { public static void main(String[] args) { int[] x = new int[] { 10 }; System.out.println("메인 메소드의 소환-->main():X=" + x[0]); change(x); System.out.println("메소드 소환후-->After change(x)"); System.out.println("최종 메인 메소드-->main():X=" + x[0]); } static void change(int[] x) { x[0] = 1000; System.out.println("메소드 소환--> change():X=" + x[0]); }} Colored by Co..

기본형 매개변수 VS 참조형 매개변수

1234567891011121314151617181920212223242526272829class Data { int x;} class ReferenceParamEx { public static void main(String[] args) { // 항상 시작은 main부터 시작이 되며 Data타입이 존재하기 때문에 상단의 class가 Data가 존재해야 한다. // 이후 Data 클래스 안의 멤버변수안에 접근이 가능하다. // 멤버변수의 접근은 참조변수의 경우 인스턴스를 생성후에 접근을 해야 한다. // d.x를 통해 x의 값이 10으로 설정을 한다. // 이후 change()의 메소드를 실행하는데 자연스럽게 satic이 붙은 메소드가 실행이 되며 d.x=1000을 통해 전역변수의 //d.x의 값은 10..

Super()-조상 클래스의 생성자

Object클래스를 제외한 모든 클래스의 생성자 첫 줄에는 생성자 this() 또는 super()를 호출해야 한다. 그렇지 않으면 컴파일러가 자동적으로 super()를 생성자의 첫 줄에 삽입한다. 인스턴스를 생성 할때는 클래스를 선택하는 것만큼 생성자를 선택하는 것도 중요한 일이다. 1.클래스- 어떤 클래스의 인스턴스를 생성할 것인가?2. 생성자- 선택한 클래스의 어떤 생성자를 이용해서 인스턴스를 생성할 것인가?12345678910111213141516171819202122232425262728293031class PointTest2 { public static void main(String[] args) { Point3D p3 = new Point3D(); System.out.println("p3.x=..

오버라이딩의 조건

오버라이딩은 메서드의 내용만을 새로 작성하는 것이므로 메서드의 선언부는 조상의 것과 완전히 일치해야 한다.그래서 오버라이딩이 성립하기 위해서는 다음과 같은 조건을 만족해야 한다. 자손 클래스에서 오버라이딩하는 메서드는 조상 클래스의 메서드와 -이름이 같아야 한다.-매개변수가 같아야 한다.-변환타입이 같아야 한다. 한마디로 요약하면 선언부가 서로 일치해야 한다는 것이다. 다만 접근 제어자와 예외는 제한된 조건 하에서만 다르게 변경할 수 있다. 1. 접근 제어자는 조상 클래스의 메서드보다 좁은 범위로 변경 할 수 없다. 2. 조상 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.

자바-생성자

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 package p278; /* ⓐ 생성자 인스턴스가 생성될 때 호출되는 인스턴스 초기화 메서드이다. 따라서 변수의 초기화 작업에 주로 사용되며, 인스턴스 생성 시에 실행되어야 할 작업을 위해서도 사용된다. 생성자 역시 메서드처럼 클래스내에서 선언되며, 구조도 메서드와 유사하지만, 리턴값이 없다는 점이 다르다. 그렇다고 해서 생성자 앞에 리턴값이 없음을 뜻하는 키워드 void를 사용하지 않고, 단지 아무것도 적지 않는다. 생성자의 조건은 다음과 같다. 1. 생성자의 이름은 클래스의 이름과 ..

자바-오버로딩에 관해서

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 package p278; class p283 { /* * 오버로딩이란? 메서드도 변수와 마찬가지로 같은 클래스 내에서 서로 구별될 수 있어야 하기 때문에 각 기 다른 이름을 가져야한다. * 그러나 자바에서는 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메서드가 있더라도 매개변수의 개수 또는 타입이 다르면, * 같은 이름을 사용해서 메서드를 정의할수 있다. 이처럼, 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것을..

클래스 멤버와 인스턴스 멤버간의 참조와 호출

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 package p278; class p281 { int iv = 10; // 클래스 변수안에 존재하는 인스턴스 초기화후 iv에 10이 존재 static int cv = 20; // 클래스 멤버 statc cv에 20이 존재 int iv2 = cv; // 인스턴스 변수는 클래스 변수를 참조할수 있다. // 그러나 아래와 같이 클래스 변수는 인스턴스변수를 참조할수 없다. 에러발생!!! /* * static int cv2=iv; 클래스변수는 인스턴스 변수를 사용 할 수 없음 */ static int cv2 = new p..