객체란 무엇인가? 그리고 왜 써야 하는가
- 객체란 데이터와 그 데이터를 처리하는 함수들을 묶어놓은 하나의 독립적인 단위입니다.
- 이렇게 하나의 단위로 묶어놓으면 코드의 가독성이 좋아지고 유지보수가 편리해집니다. 또한 객체 지향 프로그래밍은 코드 재사용성이 높아지고 대규모 프로그램을 개발할 때 유용합니다.
//객체 설계용 클래스(라이브러리 클래스)는 메인 메서드를 작성하지 않습니다.
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* 객체지향 생성자, 접근제한자 (0) | 2024.04.18 | 
| Java* 메서드 basic (0) | 2024.04.12 | 
| Java* Matrix (0) | 2024.04.12 | 
| Java* 배열(array) Scanner (0) | 2024.04.12 | 
