[JAVA 객체지향프로그래밍] 개요 + 객체지향프로그래밍의 구현

    반응형

    이번에 데보션영 활동으로 클린코드를 읽었습니다. 근데 클린코드의 코드들이 전부 JAVA더라구요! 언어에 대한 내용은 아니기에 언어가 큰 의미는 없지만, 그래도 자바는 제가 주로 쓰는 언어는 아니라 모르는 문법은 조금씩 찾아가며 읽었었습니다. 그리고 종강하면 자바를 다시 한 번 훑어야겠구나,, 생각했고, 그 첫번째 글로 객체지향 자바 프로그래밍에 대한 기초적인 내용을 자세하게 써보려합니다.

     

    이 글은 패스트 캠퍼스 한번에 끝내는 Java/Spring 웹 개발 마스터 초격차 패키지 강의를 듣고 공부한 내용을 바탕으로 정리한 글입니다.


     

    1. 객체(Object)

    객체란, 사전적 의미로는 의사나 행위가 미치는 대상이고 프로그램에서는 추상적 데이터의 단위를 말합니다.

    좀 더 쉽게 이야기하면 우리 주변의 모든 사물과 행위는 프로그램상의 객체로 정의될 수 있습니다. 예를 들면, 학생, 회원, 생산, 주문, 배송 등 모든 것이 객체로 정의될 수 있습니다.

    2. 객체 지향 프로그래밍과 절차 지향 프로그래밍

    프로그래밍은 크게 객체 지향과 절차 지향으로 구분될 수 있습니다.

    • 절차 지향 프로그래밍(Procedural Programming)은 시간이나 사건의 흐름에 따른 프로그래밍입니다.
      예를 들어, 아침에 일어나 학교를 가는 과정을 절차 지향 프로그래밍으로 짠다면,
      일어난다 → 씻는다 → 밥을 먹는다 → 버스를 탄다 → 요금을 지불한다 → 학교에 도착한다
    • 객체 지향 프로그래밍(Objected Oriented Programming)은 다수의 객체를 만들고, 이들끼리 서로 상호작용하도록 만드는 프로그래밍입니다.
      객체 지향 프로그래밍으로 위의 예시를 짠다면, 다음과 같이 나타낼 수 있습니다. 순서(절차)가 없고 객체간 상호작용으로 나타나게 되지요.

    3. 객체 지향 프로그램의 구현

    1) 객체 정의

    객체는 붕어빵에 비유할 수 있습니다. 그러면 그 객체를 찍어내는 클래스는 붕어빵을 찍어내는 붕어빵틀에 비유될 수 있겠지요. (1학년 때 교수님께서 비유하신 내용이 아직도 잊혀지지 않습니다..,, 이것만큼 귀엽고 이해가 쏙쏙되는 비유는 없다고 생각해요..ㅎ) 따라서 객체를 정의하기 위해서는 클래스를 정의해야 합니다!

    아래에서 예시로 학생 클래스, 주문 클래스, 회원 클래스를 정의해보겠습니다.

    public class Student {
        int studentNumber;
        String studentName;
        int majorCode;
        String majorName;
        int grade;
    }
    public class Order {
        int orderId;
        String buyerId;
        String sellerId;
        int productId;
        String orderDate;
    }
    public class UserInfo {
        String userId;
        String userPassWord;
        String userName;
        String userAddress;
        int phoneNumber;
    }

    위의 코드에서는 멤버 변수(클래스의 속성)만 정의해보았습니다. 두번째 단계에서 멤버 변수와 메서드에 대해서 더 자세하게 구현해보겠습니다. 클래스를 정의할 때는 클래스 이름은 대문자로 시작하도록합니다. 그리고 자바 파일 하나에 클래스는 여러 개가 있을 수 있지만, public 클래스는 하나이고, public 클래스와 자바 파일의 이름은 동일해야 합니다. 이때 클래스명은 camel notation 방식으로 명명합니다.

    2) 멤버 변수(객체의 속성)과 메서드(객체의 역할) 구현

    클래스를 정의할 때, 객체의 속성은 멤버 변수로, 객체의 기능은 메서드로 구현합니다. 학생 클래스의 속성을 멤버 변수로 선언하고 메서드를 구현해보도록 하겠습니다. 학생의 속성은 학번, 이름, 주소 등이 있을 수 있겠고, 학생 클래스의 기능으로는 자기소개를 넣어보겠습니다.

    public class Student {
        public int studentId;
        public String studentName;
        public String address;
    
        public void introduce() {
            System.out.println("Hi, I'm " + studentName + ". I live in " + address + ".");
        }
    }

    studentId, studentName, address 3가지 매개변수와 introduce() 메서드를 구현하였습니다.

    이렇게 정의한 학생 클래스로 학생 객체(인스턴스)를 만들어보겠습니다.

    public class StudentTest {
    
        public static void main(String[] args) {
            Student studentLee = new Student();
            studentLee.studentName = "Lee";
            studentLee.address = "Seoul";
    
            Student studentKim = new Student();
            studentKim.studentName = "Kim";
            studentKim.address = "Jeju";
    
            studentLee.introduce();
            studentKim.introduce();
        }
    }

    Student 클래스로 studentLee와 studentKim 객체를 만들고 객체의 매개변수를 각각 지정해주었습니다. 그리고 코드를 실행하면 아래와 같이 메서드 결과가 출력되는 것을 확인할 수 있습니다.

     

    3. 객체간 협력 구현

    위의 예시에서 본 메서드처럼 자기 자신이 수행하는 기능에만 그치지 않고, 다른 객체와의 상호작용을 통해 객체간 협력이 일어나느 경우도 구현해야 합니다. 예를 들어, 학생 클래스가 버스 클래스를 타는 경우를 구현해보겠습니다.

    package ch14;
    
    public class Student {
    
        String studentName;
        int grade;
        int money;
    
        public void takeBus(Bus bus) {
            bus.take(1000);
            this.money -= 1000;
        }
    
        public void takeSubway(Subway subway) {
            subway.take(1200);
            this.money -= 1200;
        }
    }

    위 코드에서 학생 클래스의 takeBus는 버스 클래스를 매개변수로 받습니다. 버스 클래스와 학생 클래스의 객체간 협력이 일어난 경우입니다.

    반응형

    댓글