🌱 오늘의 주제 : 객체지향 프로그래밍 규칙 총 정리 (1)
🌱 객체지향 프로그래밍 (1)
- 한 파일에 여러 클래스 작성하기
- 소스파일의 이름은 public class 이름과 일치해야 한다. 만일 소스파일 내에 public class 가 없다면, 소스파일의 이름은 어떤 클래스의 이름을 해도 상관 없다.
- 객체의 생성 : 클래스명 변수명 = new 클래스명();
- 객체 배열: Tv[] tvArr = new TV[3] // 참조변수 배열을 생성
- tvArr[0] = new Tv(); // 객체를 생성해서 배열의 각 요소의 저장 // ** 저장하는 법 주의 - 객체 수 많을 때는 for문 사용.
- tvArr[1] = new Tv();
- tvArr[2] = new Tv();
- 선언 위치에 따른 변수의 종류
- 멤버변수 : 클래스 변수 (static / CV / 공통 속성), 클래스 영역에서 선언. 객체생성없이 '클래스이름.클래스 변수'로 직접 사용 가능.
- ex) Card.width = 50;
- 멤버변수: 인스턴스 변수(iv / 개별 속성) , 클래스 영역에서 선언. 객체생성 필수
- ex) Card c1 = new Card();
- c1.kind = "Heart";
- 지역변수(lv) : 클래스 영역 이외의 영역(메서드, 생성자, 초기화 블럭 내부)
- 멤버변수 : 클래스 변수 (static / CV / 공통 속성), 클래스 영역에서 선언. 객체생성없이 '클래스이름.클래스 변수'로 직접 사용 가능.
- 메서드란? : 반환타입 메서드이름 (타입 변수명, 타입 변수명) { return }
- int add (int a, int b) - 선언부
- { int result = a + b; - 구현부
- return result; } // return 반환값이 반드시 포함되어 있어야 한다. 단, void 타입은 제외. // 반환 타입이 반드시 일치!! // if - else문은 리턴문 각각 써야한다.
- 메서드의 호출 : 인수(argument)의 개수, 순서, 타입은 호출된 메서드에 선언된 매개변수와 일치해야 한다.
- 메서드의 실행 흐름
- 1. MyMath mm = new MyMath(); - MyMath클래스의 인스턴스를 생성한다.
- 2. long value = mm.add(1L, 2L); - 참조변수 mm을 통해 메서드를 호출한다.
- 기본형 매개변수 : 변수의 값을 읽기만 할 수 있다. (read only)
- 참조형 매개변수 : 변수의 값을 읽고 변경할 수 있다. (read & write)
- static 메서드 : 메서드 앞에 static이 붙어 있으면 클래스 메서드.
- 객체 생성하지 않고 '클래스 이름.메서드 이름(매개변수)로 호출 가능.
- 인스턴스 메서드 : 메서드 앞에 static이 붙어 있지 않으면 인스턴스 메서드.
- 객체를 생성해야만 호출 가능.
- static을 언제 붙여야 할까?
인스턴스 변수(iv) | 인스턴스 변수는 서로 다른 값을 유지한다. static이 붙은 멤버들 사용 가능. |
(static)클래스 변수(cv) | 같은 값을 유지되어야하는 변수는 static을 붙인다. 인스턴스를 생성하지 않아도 사용 가능. |
인스턴스 메서드 | static이 붙은 멤버들 사용 가능. |
(static)클래스 메서드 | 인스턴스 생성 없이 호출 가능. 인스턴스 변수 사용 금지. 인스턴스 변수를 필요로 하지 않는다면 static 붙이기 권장.(성능 향상) |
- 같은 클래스에 속한 메서드 간의 호출과 참조
- 참고 : 인스턴스 멤버 - 인스턴스 변수, 인스턴스 메서드 / (static) 클래스 멤버 - 클래스 변수, 클래스 메서드
인스턴스 메서드 | 같은 클래스에 속한 멤버들 간에 인스턴스 생성 없이 참조 또는 호출 가능. |
(static)클래스 메서드 | 클래스 멤버가 인스턴스 멤버를 참조 또는 호출하고자 할 경우, 인스턴스 생성해야함. |
- 오버로딩 : 한 클래스 내에 매개변수 개수 또는 타입이 다르면, 같은 이름을 사용해서 메서드를 정의 할 수 있다.
- 1. 메서드 이름이 같아야 한다.
- 2. 매개변수의 개수 또는 타입이 달라야 한다.
- 3. 반환 타입은 관계 없다.
- 생성자: 인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드', 또는 인스턴스 생성 시에 실행되어야 하는 작업을 위해서 사용.
- 1. 생성장의 이름은 클래스의 이름과 같아야 한다.
- 2. 생성자는 리턴 값이 없다.
- 3. 모든 클래스는 반드시 생성자를 가져야 한다.
- 4. 생성자도 오버로딩이 가능하다. 즉, 하나의 클래스에 여러개의 생성자 존재 가능. (매개변수 없는 생성자, 있는 생성자)
- 기본 생성자: 생성자가 하나도 정의되지 않은 경우 컴파일러는 자동적으로 기본 생성자를 추가해 준다. 기본 생성자가 컴파일러에 의해서 추가 되는 경우는 클래스에 정의된 생성자가 하나도 없을 때 뿐이다.
- 클래스 이름() { }
- 매개변수가 있는 생성자: 인스턴스를 생성하는 동시에 원하는 값으로 초기화를 할 수 있게 된다.
- Car c = new Car("white", "auto", 4);
- 생성자에서 다른 생성자 호출하기 - this()
- 생성자의 이름으로 클래스이름 대신 this를 사용한다.
- 한 생성자에서 다른 생성자를 호출할 때는 반드시 첫 줄에서만 호출이 가능하다.
- Car2(String color) { this(color, "auto", 4);}
- 같은 클래스 내의 생성자들은 일반적으로 서로 관계가 깊은 경우가 많아서 이처럼 서로 호출하면 더 좋은 코드 얻을 수 있다. , 유지보수 쉬워짐.
- 객체 자신을 가리키는 참조변수 - this
- this는 참조변수로 인스턴스 자신을 가리킨다. 참조변수를 통해 인스턴스 멤버에 접근할 수 있다.
- this를 사용할 수 있는 것은 인스턴스 멤버뿐이다.
this | 인스턴스 자신을 가리키는 참조변수, 인스턴스의 주소가 저장되어 있다. 모든 인스턴스메서드에 지역변수로 숨겨진 채로 존재한다. |
this(), this(매개변수) | 생성자, 같은 클래스의 다른 생성자를 호출할 때 사용. |
- 변수의 초기화 : 변수를 선언하고 처음으로 값을 저장하는 것을 변수의 초기화이다.
- 멤버변수(클래스 변수, 인스턴스 변수)와 배열의 초기화는 선택이다.
- 지역변수의 초기화는 필수이다.
- 멤버변수의 초기화
- 클래스 변수(cv) 초기화 -> 인스턴스 변수(iv)초기화
- 자동 초기화 -> 명시적 초기화(간단, =) -> 초기화 블럭, 생성자 (복잡, { } )
'Java > 객체지향 프로그래밍 총 정리' 카테고리의 다른 글
Java - 객체지향 프로그래밍 규칙 총 정리 (2) (0) | 2023.02.25 |
---|