Java

[중앙정보처리학원] Java* 객체지향 프로그래밍

해보구 2024. 4. 18. 13:44

객체란 무엇인가? 그리고 왜 써야 하는가

  • 객체란 데이터와 그 데이터를 처리하는 함수들을 묶어놓은 하나의 독립적인 단위입니다.
  • 이렇게 하나의 단위로 묶어놓으면 코드의 가독성이 좋아지고 유지보수가 편리해집니다. 또한 객체 지향 프로그래밍은 코드 재사용성이 높아지고 대규모 프로그램을 개발할 때 유용합니다.

 

//객체 설계용 클래스(라이브러리 클래스)는 메인 메서드를 작성하지 않습니다.
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
    }
}

 

이러한 메인(버튼)이 클릭되면 실행될(실행파일) 이라고 비유해서 생각해보면 될 것 같은 페이지도 있다.

 

이런식으로 나누어서 각자의 역할을 엮어 유지보수가 편하도록 만든 것이다.