< 객체지향 프로그래밍 >
- 현실 세계에서 독립적인 존재(객체)들간의 상호작용(행위)을 프로그래밍 언어로 구현하는 것
- 프로그램 상에 객체(변수)를 만들기 위해서는 '클래스'를 먼저 만들어야 함
< 클래스 >
- 각 개체들의 정보를 담아내는 그릇 또는 틀 => VO(Value Object)
< 클래스의 구조 >
1. 필드부
- 필드 = 멤버변수 = 클래스변수 = 인스턴스변수
- 데이터를 저장하는 역할(변수)
- 클래스 내부지만 메소드 밖 영역에 정의함
[ 표현법 ] 접근제한자 (예약어) 자료형 필드이름;
* 접근제한자(access modifier) : 필드에 접근할 수 있는 범위를 제한할 수 있음
public ( + ) | 어디서든 (같은 패키지, 다른 패키지 상관없이) 접근 가능 |
protected ( # ) | 같은 패키지면 무조건 접근 가능. 다른 패키지면, 상속 구조인 클래스에서만 접근 가능 |
default ( ~ ) | 같은 패키지에서만 접근 가능. 생략 가능 (= package friendly) |
private ( - ) | 오직 해당 클래스 안에서만 접근 가능 |
(위에서부터 아래로 내려올수록 접근 범위 좁아짐 : public > protected > default > private)
+, #, ~, - : 클래스 다이어그램 표기 방법(기호로 바꿔 표기) - 소통할 때 사용
2. 생성자부
* 생성자(constructor) : 메소드이름(생성자)이 클래스 이름과 동일하고, 리턴자료형이 없는 메소드(반환형 없음)
[ 표현법 ]
public 클래스이름(매개변수(생략가능)) {
해당 생성자를 통해서 객체 생성시, 실행하고자 하는 코드
}
cf) [ 메소드 표현법 ]
접근제한자 반환형 메소드이름(매개변수(생략가능)) {
실행하려고 하는 코드
}
[ 작성 목적 ]
- 객체를 생성해주기 위한 목적 (유효성있는 객체를 만들기 위해)
- 객체를 생성 뿐만 아니라, 매개변수로 전달된 값들을 바로 필드에 초기화할 목적
// Employee e1 = new Employee(); ◁ 이렇게 기본생성자로 생성하면, 데이터가 없는 사용할 수 없는 객체 생성.
매개변수로 값을 전달하여 필드값을 초기화하면서 생성한다면, 바로 사용 가능한 유효성 있는 객체를 만들 수 있음!
[ 종류 ]
- 매개변수가 없는 생성자 => 기본생성자
- 매개변수가 있는 생성자
(필드에 값을 '초기화' 할 수 있느냐 없느냐의 차이)
[ 작성 시 주의사항 ]
- 생성자의 이름은 클래스의 이름과 동일해야 함 (대,소문자 구분)
- 반환형은 존재하지 않음
- 생성자 여러개 생성 가능. 단, 매개변수가 중복되면 안됨 (=> '오버로딩' 개념과 이어짐)
- 매개변수를 받는 생성자를 작성하면 JVM이 기본생성자를 생성해주지 않음 => ★☆기본생성자 작성 필요☆★
* 기본생성자 : 매개변수가 없는 생성자
- 단지 객체를 생성할 목적으로 사용 (메모리 공간 할당, 공간 확보)
- 기본생성자 생략해도 오류 발생 X - 생성자를 만들지 않으면 JVM이 기본생성자를 자동 생성 해줌
3. 메소드부
- 기능을 구현하는 부분
- 한 번 정의해두고, 필요할때마다 호출해서 사용
- '호출할 때의 인자값'이 '매개변수의 자료형', '매개변수 개수'와 일치해야 함
[ 표현법 ] // 예약어, 매개변수, return문 부분(반환형 - void)은 생략 가능
접근제한자 (예약어) 반환형 메소드식별자(매개변수) {
메소드 호출시 실행할 코드;
( return 반환값; )
}
* 접근제한자 : 호출 할 수 있는 범위를 제한
* 반환형 : 메소드의 결과값(반환값)의 자료형 - void : 돌려줄 값이 없는 경우 사용
* 매개변수 : 메소드 호출시, 입력값으로 넣어주는 값을 받아주는 변수
해당 메소드 실행중에만 사용이 가능. 생략 가능
public class User {
// [ 필드부 ]
// 회원 아이디, 비밀번호, 이름, 나이, 성별
private String id;
private String pw;
private String name;
private int age;
private char gender;
// [ 생성자부 ]
public User() {} // 기본생성자
public User(String id, String pw, String name) { // 매개변수가 있는 생성자
this.id = id;
this.pw = pw;
this.name = name;
}
// 모든 필드를 매개변수로 받는 생성자
public User(String id, String pw, String name, int age, char gender) {
this.id = id;
this.pw = pw;
this.name = name;
this.age = age;
this.gender = gender;
}
// [ 메소드부 ]
// setter
public void setId(String id) {
this.id = id;
}
public void setPw(String pw) {
this.pw = pw;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setGender(char gender) {
this.gender = gender;
}
// getter
public String getId() {
return id;
}
public String getPw() {
return pw;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public char getGender() {
return gender;
}
// information
public String information() {
return "이름 : " + name + "\n나이 : " + age + "\n성별 : " + gender
+ "\nID : " + id + "\nPW : " + pw;
}
}
'개발 > Java' 카테고리의 다른 글
[Java] 자바 - 오버로딩(Overloading) (0) | 2022.09.14 |
---|---|
[Java] 자바 - 메소드(Method) / static 메소드 (1) | 2022.09.13 |
[Java] 자바 - 전역변수 - 클래스 변수(static변수) / 지역변수 / 상수 필드 (1) | 2022.09.13 |
[Java] 자바 - 캡슐화(Encapsulation) (0) | 2022.09.13 |
[Java] 자바 - 배열 / 배열 복사 (0) | 2022.09.07 |