객체지향 프로그래밍(OOP)

제민·2024년 7월 10일

Java 개념 공부

목록 보기
10/21
post-thumbnail

객체지향 프로그래밍의 기본 개념

  1. 객체지향 언어: "객체"를 지향하는 언어로 "객체 중심"으로 돌아갑니다.

  2. 객체란: 현실 세계에서 독립적(목적이 있고 가치가 있는 것)으로 존재하는 모든 것을 의미합니다. 현실 세계에서는 객체들 간의 상호작용으로 돌아갑니다.

  3. 객체지향 프로그래밍: 현실 세계의 객체들 간의 상호작용을 프로그래밍을 통해서 가상 세계로 구현하는 가장 효과적인 방법입니다.

  4. 클래스: 구현하고자 하는 프로그램에서 필요한 객체들을 만들기 위해서는 클래스라는 설계도가 필요합니다. 클래스는 각 객체들의 속성(데이터)들을 담아낼 그릇 같은 존재입니다.

패키지

패키지는 클래스 간의 공간적 충돌이나 접근 방법의 충돌을 막기 위해 저장 위치를 구분하여 명확하게 접근할 수 있도록 해주는 것입니다. 보통 네이밍 방법은 회사 도메인을 역으로 입력합니다. 예를 들어, 회사 도메인이 https://www.kh.com일 때 패키지 네이밍은 com.kh.팀명(프로젝트명).클래스명으로 합니다.

package f.object.ex1;

클래스의 구조

클래스 = 데이터 + 기능
일반적으로 Run이라는 클래스는 객체 생성을 위한 클래스가 아니라, main 메서드를 통해 프로그램을 실행하기 위한 클래스입니다.

public class Run {
    public static void main(String[] args) {
        // 객체를 생성할 때
        Student jaemin = new Student();
        Student minjae= new Student();
       
        jaemin.name = "제민";
        jaemin.age = 23;
       
        minjae.name = "민제";
        minjae.age = 32;
       
        jaemin.print();
        minjae.print();
    }
}

추상화 과정

  1. 내가 구현하고자 하는 프로그램에 필요한 객체들을 생각해 봅니다.
  2. 그 객체들의 공통적인 속성, 기능들을 추출합니다.
  3. 추출한 것들을 가지고 내가 구현하고자 하는 프로그램의 "실질적인 목적"에 맞춰 불필요한 속성, 기능을 제거합니다.

예시

public class Student {
    String name;
    int age;
    double height;

    public void print() {
        System.out.println("안녕하세요 " + age + "살 " + name + "입니다.");
    }
}

구조체와 클래스

변수만으로 프로그래밍을 하면 하나의 자료형으로 하나의 값만을 보관할 수 있습니다. 예를 들어, String name1 = "제민"; int age = 23; double height = 180.0;와 같이 여러 값을 보관하기 위해서는 여러 변수가 필요합니다.

배열을 사용하면 하나의 자료형으로 여러 개의 값들을 보관할 수 있지만, 여전히 여러 자료형을 함께 보관하기에는 한계가 있습니다. 이를 해결하기 위해 구조체라는 개념이 나왔고, Java에서는 이를 확장하여 클래스라는 개념을 도입했습니다.

Book 클래스 예제

public class Book {
    //필드
    //매개변수
    private String title;
    private String genre;
    private String author;
    private int maxPage;

    //생성자
    public Book(String title, String genre, String author, int maxPage) {
        this.title = title; // 내가 가진(this) title에 넘겨받은 title을 넣는다.
        this.genre = genre;
        this.author = author;
        this.maxPage = maxPage;
    }

    public String toString() {
        return "제목 : " + this.title + "\n장르 : " + this.genre + "\n저자 : " + this.author + "\n총 페이지 : " + this.maxPage;
    }
}

this 키워드

this 키워드는 인스턴스 자기 자신을 가리키는 참조 변수입니다. 주로 다음과 같은 상황에서 사용됩니다:

  1. 인스턴스 변수와 매개변수의 이름이 동일할 때, 이를 구분하기 위해 사용됩니다.
  2. 객체 자신의 주소를 반환할 때 사용됩니다.
  3. 클래스 내에서 다른 생성자를 호출할 때 사용됩니다.

위의 예제에서 this.title은 인스턴스 변수 title을 가리키며, title은 생성자의 매개변수입니다. 이를 통해 생성자의 매개변수로 전달된 값이 인스턴스 변수에 할당됩니다.

public Book(String title, String genre, String author, int maxPage) {
    this.title = title; // 내가 가진(this) title에 넘겨받은 title을 넣는다.
    this.genre = genre;
    this.author = author;
    this.maxPage = maxPage;
}

실행 코드

import f.object.ex2.BankAccount; //public 클래스는 다른 패키지에서 가져와서 사용 가능

public class Run {

    public static void main(String[] args) {
        // 클래스명 참조변수명 = new 생성자();
       
        Book b1 = new Book("불안을 이기는 심리학", "자기계발", "황양밍", 120);        
        Book b2 = new Book("자바란 무엇인가?", "전공서적" , "최지원", 350);        
        Book b3 = new Book("언더그라운드", "르포르타지","무라카미 하루키", 120);        
       
        System.out.println(b1.toString());
        System.out.println(b2.toString());    
        System.out.println(b3.toString());
    }
}
profile
초보부터 시작하는 개발자 생활

0개의 댓글