2021.10.26(화)
🌿 클래스
MVC 패턴 = Model + View + Controller
기능에 따라 서브시스템들을 구분 = 도메인 지식 관리하는 Model + 사용자에게 보여주는 View + 사용자와의 상호작용 제어하는 Controller
🌱 생성자
- 표현법
- 목적/기능 → 객체 생성 시, 기본 생성자 사용해서 객체 생성 후 setter를 이용해서 필드값 초기화, 또는 객체 생성과 동시에 필드값을 초기화
public class User {
/* User 클래스의 객체 생성: User go = new User();
* 객체 생성 시 new(새로 만든다)라는 키워드 뒤 '클래스명()' 이게 생성자(constructor)
*
* 대입연산자(=): 우항의 값을 좌항의 공간에 대입 -> User 클래스의 go 객체에 User()의 값을 대입
*/
// [필드부]
// 회원 ID, 비밀번호, 이름, 나이, 성별
// 캡슐화 단계1) 값 숨기기
private String userId;
private String userPwd;
private String name;
private int age;
private char gender;
// [생성자부]
/* 생성자: 메소드 이름이 클래스 이름과 동일하고, return(반환)자료형/반환형이 없는(void) 메소드 + 객체 생성 시/new 키워드 사용 시 호출이 되는 메소드
*
* 표현법
* public(외부에서도 접근 가능해야 하므로) 클래스이름(대문자로 시작)(매개변수는 생략 가능; 매개변수가 있도록 만드는 것이 좋음) {
* 해당 생성자를 통해 객체 생성 시 실행하고자 하는 코드 e.g. 필드 초기화 등
* }
*
* cf. 메소드의 표현법
* 접근제한자 반환형 메소드이름(매개변수(생략 가능)) {
* }
*
* 작성 목적
* 1. 객체 생성해주기 위한 목적
* 2. 객체 생성 뿐만 아니라 매개변수로 전달된 값들을 바로 필드에 초기화할 (수 있도록 하는) 목적
*
* 종류
* 1. 매개변수가 없는 생성자 = 기본 생성자
* 2. 매개변수가 있는 생성자
* 차이점: 필드에 값을 초기화할 수 있나 없나의 차이
*
* 작성 시 주의사항
* 1. 반드시 생성자의 이름은 클래스의 이름과 동일(대/소문자)
* 2. 반환형 존재하지 않음(메소드와 유사하게 생겨서 헷갈릴 수 있음)
* 3. 생성자는 여러 개 생성 가능하지만, 매개변수가 중복이 되면 안됨(overloading)
* 4. 매개변수 생성자를 명시적으로 작성하게 되면 기본 생성자를 JVM이 안 만들어줌 -> 기본 생성자를 만드는 습관을 들이는 것이 좋음
*/
// public User() { // 기본 생성자: 매개변수가 없음
// /* 단지 객체를 생성할 목적으로 사용 -> 메모리 공간이 할당될 때, 공간 확보할 때..
// * 기본 생성자는 작성 생략해도 오류 안 남 <- 생성자를 하나도 안 만들면 JVM이 기본 생성자를 자동으로 만들어줌(사람들이 자주 빼먹으니까 자동 생성되도록 기능으로 넣음)
// */
// System.out.println("생성자 호출 잘 되었나요?");
// }
// 아래 (생성자) 메소드 이름이 모두 같고, 매개변수의 갯수와 자료형이 다름 = 오버로딩(overloading); 메소드 호출(loading) 시 여러 가지 방법으로 부를 수 있음
public User() {} // 이 기본 생성자 꼭 만들기; 특히 매개변수 있는 생성자를 만들면 JVM은 기본 생성자를 자동으로 안 만들어주므로 주의
// 매개변수가 있는 생성자; 생성자의 매개변수로는 필드들이 들어올 수 있음; 매개변수 있는 생성자 2개 만든 것은 메소드 overloading
public User(String userId, String userPwd, String name) { // 객체에 초기값을 넣어줄 목적으로 매개변수 있는 생성자
this.userId = userId;
this.userPwd = userPwd;
this.name = name;
}
public User(String userId, String userPwd, String name, int age, char gender) {
this.userId = userId;
this.userPwd = userPwd;
this.name = name;
this.age = age;
this.gender = gender;
}
// [메소드부]
// 캡슐화 단계2) getter, setter 메소드 만들기
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
// ...
public String information() {
return name + "님의 ID는 " + userId + ", 비밀번호는 " + userPwd + ", 나이는 " + age + "세, 성별은 " + gender;
}
}
🌱 메소드
- 개념
- 표현법
- 매개변수 및 반환 값에 따른 4가지 형태
static 메소드 = 객체 생성할 필요 없이(객체를 생성하지 않아도 호출 가능) 프로그램 어디서든 호출해서/가져다 쓸 수 있음, 프로그램 실행~종료 시점 동안 메모리에 남아있음 ← 메모리의 static 영역에 있음
🌱 클래스 다이어그램
- 다이어그램을 보고 클래스를 작성하거나, 클래스를 다이어그램으로 표현할 수 있으면 좋다
🌿 객체 배열
클래스이름[] 배열이름 = new 클래스이름[배열크기];
ArrayList vs 배열(Array)
- ArrayList는 생성 및 초기화 시 지정한 사이즈의 70% 정도가 차면 자동으로 50%씩 커짐 + 여러 메서드 사용 가능 → 배열보다 편리
📗 소감
- Java 객체 지향의 기본 개념 학습을 마쳤다. 아직 활용은 알 듯 모르는 듯 하지만, 강사님께서 기본 개념 명확히 전달해 주시고 여러 예제를 제시해 주셨으니, 복습 잘 하고, 앞으로 잘 활용하자!
- 객체 배열도 어렵게 생각할 필요 없이, 배열의 기본 개념을 잘 알면 된다
📗 homework: 클래스(다이어그램)
'back-end dev > Java' 카테고리의 다른 글
[KH정보교육원] 13일차_다형성 (0) | 2021.11.07 |
---|---|
[KH정보교육원] 12일차_상속 (0) | 2021.11.07 |
[KH정보교육원] 10일차_캡슐화, 클래스 (0) | 2021.11.07 |
[KH정보교육원] 9일차_배열 복사, 객체 (0) | 2021.11.07 |
[KH정보교육원] 8일차_배열 (0) | 2021.11.07 |