[Java] 김영한의 실전 자바 - 기본편 섹션3,4 객체 지향 프로그래밍,생성자
○ 섹션 3 객체 지향 프로그래밍
⬜ 절차 지향 프로그래밍
◼️절차 지향 프로그래밍
- 실행 순서, 즉 절차를 지향
- 흐름을 순차적으로 따르며 처리하는 방식 (어떻게)
◼️객체 지향 프로그래밍
- 객체를 지향
- 객체들 간 상호작용을 중심으로 프로그래밍 (무엇을)
◼️차이점
절차 지향은 데이터와 처리방식이 분리, 반면 객체 지향에서는 데이터와 메서드가 하나의 '객체'안에 함께 포함
⬜ 클래스와 메서드
- 클래스에는 속성(데이터, 멤버 변수)과 기능(메서드)을 정의할 수 있다.
- 객체는 자신의 메서드를 통해 자신의 멤버 변수에 접근할 수 있다.
- 객체의 메서드 내부에서 접근하는 멤버 변수는 객체 자신의 멤버 변수이다.
메서드 예제
public class ValueObject {
int value;
void add() {
value++;
System.out.println("숫자 증가 value=" + value);
}
}
public class ValueObjectMain {
public static void main(String[] args) {
ValueObject valueObject = new ValueObject();
valueObject.add();
valueObject.add();
valueObject.add();
System.out.println("최종 숫자=" + valueObject.value);
}
}
숫자 증가 value=1
숫자 증가 value=2
숫자 증가 value=3
최종 숫자=3
⬜ 객체 지향 프로그래밍
클래스에 필요한 속성과 기능 메소드를 모두 정의하면, 이제 해당 클래스를 사용하는데 필요한 모든 속성과 기능이 하나의 클래스에 포함된다!
◼️캡슐화
- 속성과 기능을 하나로 묶어서 필요한 기능을 메서드를 통해 외부에 제공하는 것
○ 섹션 4 생성자
⬜ this
- 멤버 변수와 메서드 매개변수의 이름이 같으면, 매개변수가 우선순위를 가진다.
- this는 인스턴스 자신의 참조값을 가리킨다. 멤버 변수에 접근하려면 앞에 this. 라고 해주면된다.
- this는 생략 가능하다. this 생략시 가까운 지역변수를 찾고, 없으면 멤버 변수를 찾는다.
public class MemberThis {
String nameField;
void initMember(String nameParameter) {
nameField = nameParameter;
}
}
⬜ 생성자
- 생성자의 이름은 클래스 이름과 같아야 한다. 따라서 첫 글자도 대문자로 시작한다.
- 생성자는 반환 타입이 없다. 비워두어야 한다.
- 나머지는 메서드와 같다.
- 생성자를 사용하면 필수값 입력을 보장할 수 있다.
⬜ 기본 생성자
- 매개변수가 없는 생성자
- 클래스에 생성자가 하나도 없으면 자바 컴파일러는 매개변수가 없고, 작동하는 코드가 없는 기본 생성자를 자동으
로 만들어준다. - 생성자가 하나라도 있으면 자바는 기본 생성자를 만들지 않는다.
기본 생성자 예시
public class MemberDefault {
String name;
//기본 생성자
public MemberDefault() {
}
}
참고
자바가 자동으로 생성해주시는 기본 생성자는 클래스와 같은 접근 제어자를 가진다. public 은 뒤에 접근 제어자에서 자세히 설명한다.
⬜ 생성자 - 오버로딩과 this()
생성자도 메서드 오버로딩처럼 매개변수만 다르게 해서 여러 생성자를 제공할 수 있다.
MemberConstruct(String name, int age)
MemberConstruct(String name, int age, int grade)
this() 라는 기능을 사용하면 생성자 내부에서 자신의 생성자를 호출할 수 있다.
이때, this()는 생성자 코드의 첫줄에만 작성할 수 있다.
아래는 첫번째 생성자 내부에서 두번째 생성자를 호출한다.
public class MemberConstruct {
String name;
int age;
int grade;
MemberConstruct(String name, int age) {
this(name, age, 50); //변경
}
MemberConstruct(String name, int age, int grade) {
System.out.println("생성자 호출 name=" + name + ",age=" + age + ",grade=" +
grade);
this.name = name;
this.age = age;
this.grade = grade;
}
}
본 내용은 인프런 " 김영한의 실전 자바 - 기본편 " 강의를 수강 후 정리한 내용입니다.
'Java' 카테고리의 다른 글
[Java] 김영한의 실전 자바 - 기본편 섹션5,6 패키지, 접근 제어자 (0) | 2024.04.15 |
---|---|
[Java의 정석] chapter06 객체지향 프로그래밍 I - 요약정리 (0) | 2024.04.11 |
[Java] Array / List / ArrayList 차이점 정리 (1) | 2024.04.08 |
[Java의 정석] chapter05 배열 array - 요약정리 (0) | 2024.04.08 |
[Java] 김영한의 실전 자바 - 기본편 섹션1~2 클래스와 데이터, 기본형과 참조형 (0) | 2024.04.08 |