객체지향 언어: "객체"를 지향하는 언어로 "객체 중심"으로 돌아갑니다.
객체란: 현실 세계에서 독립적(목적이 있고 가치가 있는 것)으로 존재하는 모든 것을 의미합니다. 현실 세계에서는 객체들 간의 상호작용으로 돌아갑니다.
객체지향 프로그래밍: 현실 세계의 객체들 간의 상호작용을 프로그래밍을 통해서 가상 세계로 구현하는 가장 효과적인 방법입니다.
클래스: 구현하고자 하는 프로그램에서 필요한 객체들을 만들기 위해서는 클래스라는 설계도가 필요합니다. 클래스는 각 객체들의 속성(데이터)들을 담아낼 그릇 같은 존재입니다.
패키지는 클래스 간의 공간적 충돌이나 접근 방법의 충돌을 막기 위해 저장 위치를 구분하여 명확하게 접근할 수 있도록 해주는 것입니다. 보통 네이밍 방법은 회사 도메인을 역으로 입력합니다. 예를 들어, 회사 도메인이 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(); } }
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에서는 이를 확장하여 클래스라는 개념을 도입했습니다.
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.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()); } }