Java
정수, 실수, 캐릭터, 불린값을 제외하고는 전부 객체 주소값을 가지고 있다.
import java.util.Scanner;
public class StringDemo2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String value1 = "홍길동";
System.out.print("이름을 입력하세요 : ");
String value2 = sc.next();
// == 비교 연산자로 문자열 비교
// value1변수의 주소값과 value2변수의 주소값을 비교한다.
// (서로 다른 객체의 주소값을 가지고 있으므로 false)
System.out.println(value1 == value2);
// String객체는 문자열의 내용을 비교할 수 있는 equals(다른 문자열) 메소드를 제공한다.
// value1변수가 참조하는 객체와 value2변수가 참조하는 객체가 동일한 내용을 가지고 있으면
// 객체의 주소값에 상관없이 true가 나온다
System.out.println(value1.equals(value2));
System.out.println(value2.equals(value1));
sc.close();
}
}
캡슐화(Encapsulation)
상속(Inheritance)
다형성(Polymorphism)
new 클래스명();
// 객체 생성하기
클래스명 참조변수;
참조변수 = new 클래스명();
// 참조변수 선언, 객체 생성
Car myCar;
myCar = new Car();
Book book1;
book1 = new Book();
Book book2 = null;
book2 = new Book();
// 참조변수 선언 및 객체 생성
클래스명 참조변수 = new 클래스명();
Car yourCar = new Car();
Book book3 = new Book();
참조변수는 생성된 객체의 주소값을 저장하는 변수다.
참조변수의 타입은 해당 객체를 생성할 때 사용했던 클래스이름이다.
주소값이 저장된 참조변수는 힙영역에 생성된 객체를 참조하게 된다.
생성된 객체의 속성과 기능을 사용하기 위해서는 반드시 해당 객체를 참조하고 있는 참조변수를 사용해야 한다.
출처 : https://github.com/eungsu/documents
package day1;
public class Book {
// 필드 정의하기(제목, 저자, 출판사, 가격)
// 생성된 객체의 고유한 속성(값)을 저장하는 멤버변수가 된다.
String title;
String writer;
String publisher;
int price;
int discountPrice;
// 메소드 정의하기
// 생성된 객체의 고유한 기능이 된다.
// 메소드는 생성된 객체의 모든 필드값을 사용할 수 있다.
void viewBookInfo() {
System.out.println("제목 : " + title);
System.out.println("저자 : " + writer);
System.out.println("출판사 : " + publisher);
System.out.println("가격 : " + price);
System.out.println("할인가격 : " + discountPrice);
System.out.println();
}
}
package day1;
public class BookApp {
public static void main(String[] args) {
// 객체 생성하기
Book book1 = new Book();
Book book2 = new Book();
Book book3 = new Book();
// 클래스명@해시코드(객체의 주소값이 아님)
System.out.println(book1); // day1.Book@5aaa6d82
System.out.println(book2); // day1.Book@73a28541
// 객체의 속성에 값 저장하기
book1.title = "자바의 정석";
book1.writer = "남궁성";
book1.publisher = "도우출판사";
book1.price = 29000;
book1.discountPrice = 25600;
book2.title = "이것이 자바다";
book2.writer = "신용권";
book2.publisher = "한빛미디어";
book2.price = 35000;
book2.discountPrice = 31500;
System.out.println();
//객체의 기능 사용하기
System.out.println("### 첫번째 책 정보");
book1.viewBookInfo();
System.out.println("### 두번째 책 정보");
book2.viewBookInfo();
System.out.println("### 세번째 책 정보");
book3.viewBookInfo();
}
}
package day1;
public class BookApp2 {
public static void main(String[] args) {
//객체 생성
Book book1 = new Book();
// 객체의 멤버변수 초기화
book1.title = "이것이 자바다";
book1.writer = "신용권";
book1.publisher = "한빛미디어";
book1.price = 35000;
book1.discountPrice = 31500;
// 객체의 멤버메소드 호출(실행)
System.out.println("### 참조변수 book1이 참조하는 Book객체의 정보 출력");
book1.viewBookInfo();
// book1참조변수가 가지고 있는 주속밧을 book2참조변수에 대입한다.
// book2참조변수는 book1참조변수와 같은 주소값을 가지게 된다.
// book2참조변수는 book1참조변수가 참조하는 객체를 같이 참조하게 된다.
// 즉, 7번째 라인에서 생성된 Book객체를 참조하는 참조변수는 book1과 book2 2개다
Book book2 = book1;
System.out.println("### 참조변수 book2이 참조하는 Book객체의 정보 출력");
book2.viewBookInfo();
// 참조변수가 더이상 객체를 참조하기 못하게 하기
// 참조변수에 null값을 대입하면 해당 참조변수는 객체의 주소값 대신 null값을 가지게 된다.
// null값이 저장된 참조변수는 더이상 객체를 참조할 수 없다.
// book1은 Book객체와의 연결이 끊어졌다.
// * 참조변수의 주소값이 null인 경우는 객체와의 연결이 끊어졌거나 혹은 아칙 객체가 연결되지 않은 참조변수다.
book1 = null;
// book1.title = "스프링 인 액션"; // 객체의 멤버변수에 접근할 수 없다.
// book1.viewBookInfo(); // 객체의 멤버메소드를 실행할 수 없다.
}
}
package day1;
public class ProductApp2 {
public static void main(String[] args) {
// 상품정보를 3개 저장하는 배열객체를 생성하기
Product[] products = new Product[3];
System.out.println("### 배열 생성 직후 배열의 각 칸에 저장된 값 출력하기");
System.out.println("0번쨰 칸 : " + products[0]);
System.out.println("1번쨰 칸 : " + products[1]);
System.out.println("2번쨰 칸 : " + products[2]);
// 상품정보를 담을 수 있는 Product객체 3개 생성하기
Product p1 = new Product();
p1.no = 100;
p1.category = "스마트폰";
p1.name = "아이폰12";
p1.maker = "애플";
p1.price = 1500000;
p1.stock = 20;
p1.isSoldOut = false;
Product p2 = new Product();
p2.no = 120;
p2.category = "노트북";
p2.name = "LG그램";
p2.maker = "LG";
p2.price = 2500000;
p2.stock = 10;
p2.isSoldOut = false;
Product p3 = new Product();
p3.no = 130;
p3.category = "스마트워치";
p3.name = "애플워치5";
p3.maker = "애플";
p3.price = 600000;
p3.stock = 30;
p3.isSoldOut = false;
System.out.println("### 참조변수가 참조하는 객체의 정보 출력하기");
System.out.println("p1이 참조하는 객체 : " + p1);
System.out.println("p2이 참조하는 객체 : " + p2);
System.out.println("p3이 참조하는 객체 : " + p3);
// 배열의 0번째 칸부터 2번째 칸에 생성된 Product객체를 저장하기
products[0] = p1; // p1참조변수가 참조하는 객체의 주소값을 배열의 0번쨰 칸에 대입함
products[1] = p2; // p2참조변수가 참조하는 객체의 주소값을 배열의 1번쨰 칸에 대입함
products[2] = p3; // p3참조변수가 참조하는 객체의 주소값을 배열의 2번쨰 칸에 대입함
System.out.println("### 배열의 각 칸에 Product객체를 저장한 후 각 칸에 저장된 값 출력하기");
System.out.println("0번째 칸 : " + products[0]);
System.out.println("1번째 칸 : " + products[1]);
System.out.println("2번째 칸 : " + products[2]);
// 모든 상품의 이름을 화면에 출력하기
Product px = products[0]; // products배열의 0번째 칸에 저장된 Product객체의 주소값을 px에 대입
Product py = products[1]; // products배열의 1번째 칸에 저장된 Product객체의 주소값을 py에 대입
Product pz = products[2]; // products배열의 2번째 칸에 저장된 Product객체의 주소값을 pz에 대입
System.out.println("### 배열에 각 칸에 저장된 Product객체의 상품이름을 출력하기");
System.out.println("0번쨰 칸에 저장된 상품객체의 이름 : " + px.name);
System.out.println("1번쨰 칸에 저장된 상품객체의 이름 : " + py.name);
System.out.println("2번쨰 칸에 저장된 상품객체의 이름 : " + pz.name);
System.out.println("0번쨰 칸에 저장된 상품객체의 이름 : " + products[0].name);
System.out.println("1번쨰 칸에 저장된 상품객체의 이름 : " + products[1].name);
System.out.println("2번쨰 칸에 저장된 상품객체의 이름 : " + products[2].name);
// 모든 상품의 이름을 향상된 for문을 사용해서 출력하기
System.out.println("### 향상된 for문을 사용해서 배열에 저장된 모든 상품의 이름을 출력하기 ###");
for (Product x : products) { // x에는 products배열에 저장된 Product객체의 주소값이 순서대로 출력된다.
// System.out.println("상품명 : " + x.name);
String productName = x.name;
int productPrice = x.price;
int productStock = x.stock;
System.out.printf("%-20s%15d%10d\n", productName, productPrice, productStock);
}
}
}