객체란 무엇인가? 그리고 왜 써야 하는가
- 객체란 데이터와 그 데이터를 처리하는 함수들을 묶어놓은 하나의 독립적인 단위입니다.
- 이렇게 하나의 단위로 묶어놓으면 코드의 가독성이 좋아지고 유지보수가 편리해집니다. 또한 객체 지향 프로그래밍은 코드 재사용성이 높아지고 대규모 프로그램을 개발할 때 유용합니다.
//객체 설계용 클래스(라이브러리 클래스)는 메인 메서드를 작성하지 않습니다.
public class Pen {
//객체의 속성을 필드(멤버변수)라고 부릅니다.
String color;
int price;
String productNo;
//객체의 기능을 메서드라고 합니다.
void write() {
System.out.println(color + "색 글을 씁니다.");
}
void draw() {
System.out.println(color + "색 그림을 그립니다.");
}
void priceInfo() {
System.out.println("제품번호: " + productNo);
System.out.println(color + "색 펜의 가격은 "
+ price + "원 입니다.");
}
}
틀을 제작해 보았다. 값은 매기지 않고 속성과 기능들만 명세해 놓은 것.
이것이 바로 객체를 설계하기 위한 설계도, 클래스 이다.
객체지향 코드는 이런식으로 저장된다고 생각하면 된다.
문자열비교
String s1 = "hello";
String s2 = "hello";
System.out.println(s1.equals(s2)); // true
String s3 = new String("hello");
System.out.println(s1.equals(s3)); //true
문자열 비교는 .equals로 하자
객체지향의 코드들은 여러 페이지로 나뉜다. 예를들어
package day06.member;
import util.SimpleInput;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
MemberController mc = new MemberController();
mc.run();
}
}
메인 페이지에서는 실행만을 담당하고
package day06.member;
import util.SimpleInput;
import java.time.LocalDate;
// 역할: 회원 1명의 정보를 가지고 있어야 한다.
public class Member {
// 필드, 속성
int id; // 식별번호
String email;
String memberName;
String password;
String gender;
int age;
LocalDate regDate; // 회원가입일자
// 생성자: 회원정보가 생성될 때 초기 데이터를 처리
// - 객체가 생성될 시점에 호출되는 함수로 객체의 초기화를 담당한다.
// 시스템이 생성하는 데이터: 회원번호, 회원가입일자
// 사용자가 제공하는 데이터: 이메일, 패스워드, 이름, 성별, 나이
Member(String email, String password, String memberName, String gender, int age) {
this.id = 1;
this.regDate = LocalDate.now(); // 현재 시간을 읽어서 처리
this.email = email;
this.password = password;
this.memberName = memberName;
this.gender = gender;
this.age = age;
}
// toString: 객체의 정보를 출력할 수 있음
public String toString() {
return String.format("# 이름: %s, 이메일: %s, 나이: %d세, 성별: %s, 가입일: %s"
, this.memberName, this.email, this.age, this.gender, this.regDate);
}
// 회원의 비밀번호를 수정하는 메서드
void changePassword(String newPassword) {
this.password = newPassword;
}
}
위 코드는 속성을 선언해서 다른 자식 클래스들에서도 불러온다고 생각하면 된다. 또
package day06.member;
import util.SimpleInput;
// 역할: 사용자의 메뉴 입력을 분기하는 역할
public class MemberController {
MemberView mv;
SimpleInput si;
MemberController() {
this.mv = new MemberView();
this.si = new SimpleInput();
}
// 메뉴 입력 분기에 따라 할 일을 나눠주는 기능
void run() {
while (true) {
String menuNum = mv.showProgramMenu();
switch (menuNum) {
case "1":
mv.inputNewMember();
break;
case "2":
// 이메일을 입력받아서 회원을 개별조회 해주는 코드
mv.getMember();
break;
case "3":
mv.showMembers();
break;
case "4":
mv.updatePassword();
break;
case "5":
mv.deleteMember();
break;
case "6":
mv.restoreMember();
break;
case "7":
boolean flag = mv.exitProgram();
if (flag) return;
} // end switch
si.stopInput();
}// end while
}
}
이러한 메인(버튼)이 클릭되면 실행될(실행파일) 이라고 비유해서 생각해보면 될 것 같은 페이지도 있다.
이런식으로 나누어서 각자의 역할을 엮어 유지보수가 편하도록 만든 것이다.
'Java' 카테고리의 다른 글
[중앙정보처리학원] Java* 객체지향 Practice (0) | 2024.04.18 |
---|---|
[중앙정보처리학원] Java* 객체지향 생성자, 접근제한자 (1) | 2024.04.18 |
[중앙정보처리학원] Java* 메서드 basic (1) | 2024.04.12 |
[중앙정보처리학원] Java* Matrix (1) | 2024.04.12 |
[중앙정보처리학원] Java* 배열(array) Scanner (0) | 2024.04.12 |