728x90
반응형
Variable Scope
// <package> 의미있는 디렉토리 별로 클래스를 분류하기 위해 명시
package step1;
// <class> 일반적으로 객체 생성을 위한 틀을 위해 정의한다
public class Person {
/* < instance variable 인스턴스 변수 >
* 객체의 속성정보를 저장 : 객체의 정보를 유지하기 위해 !
* class level에서 선언됨
* java 메모리 영역 중 Heap영역(동적 메모리 영역)에 저장
* 선언만 해도 자동 기본 초기화된다
* String은 참조형이므로 null로 초기화됨
*/
private String name;
public void eat() {
/* < local variable 지역변수 >
* 메소드에서 일시적으로 사용하기 위해!
* method level에서 선언됨
* method 실행 시에 일시적으로 사용된 후, 메모리에서 해제된다.
* java 메모리 영역 중 Stack영역에 저장
*/
int count = 2;
System.out.println(count+"인분을 먹다.");
}
// name : local variable | parameter 지역변수, 매개변수, 파라미터
public void setName(String name) {
// this.name : this는 현재 객체를 가리키므로 인스턴스 변수 name을 지칭
// name : 지역변수이자 매개변수를 가리킨다.
this.name = name;
}
public String getName() {
// name : 인스턴스 변수를 가리킨다.
return name;
}
public void sleep() {
/* 지역변수 time은 초기화 되어있지 않으므로, compile error
* int time;
* System.out.println(time);
*/
int time2 = 8; // 이와같이 명시적 초기화가 필요하다.
System.out.println(name+"는 "+time2+"시간을 자다");
}
public void testVariable() {
// 인스턴스 변수 name에 접근하여 사용
System.out.println(name);
/* sleep method 의 지역변수인 time2에 접근해보자
* time2 지역변수는 해당 메서드에서만 임시로 사용하므로
* 다른 메서드에서는 사용할 수 없다. // compile error
* System.out.println(time2);
*/
sleep(); // 한 메서드에서 다른 메서드 호출은 가능
}
}
package step1;
/* <class>
* 메인 메서드가 존재하는 class로써,
* 프로그램의 실행을 위해 정의한다.
*/
public class TestVariableScope {
public static void main(String[] args) {
/* p
* <local variable>
* 메인 메서드 내에 선언되어 있기때문
* <참조 변수 reference variable>
* 객체의 주소값을 저장하므로
*/
Person p = new Person();
p.setName("아이유");
System.out.println(p.getName());
System.out.println("\n--eat 메서드 호출--");
p.eat();
System.out.println("\n--sleep 메서드 호출--");
p.sleep();
System.out.println("\n--testVariable 메서드 호출--");
p.testVariable();
}
}
객체 초기화
\car.java
package step2;
public class Car {
// < 인스턴스 변수 >
// boolean type
// 선언만하면 기본 초기화 false로 지정됨
private boolean flag;
// 실수형 : 0.01(default)
private double price;
// 참조형 : null(default)
private String model;
// getter&setter 단축키 : alt + shift + S
// boolean형은 get메서드가 아니가 is메서드를 정의
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
}
\TestObjectInit.java
package step2;
/*
* 객체 생성 초기화 variable initialize 단계를 공부하는 예제
*/
public class TestObjectInit {
public static void main(String[] args) {
/*
* Car : 클래스명, 참조형 DataType
* car : 지역 변수, 참조 변수
* = : 할당 or 대입
* new : java keyword
* Car() : 생성자 Constructor
*/
Car car = new Car();
// flag는 인스턴스 변수이다
// 별다르게 명시해주지 않았기에,
// boolean의 기본 초기화인 false가 된다.
System.out.println(car.isFlag()); //false
// price는 실수형이므로,
// 기본초기화 0.0
System.out.println(car.getPrice()); //0.0
// model은 참조형이므로,
// 기본초기화 null
System.out.println(car.getModel()); //null
}
}
** 연습
\Friend.java
package step3;
public class Friend {
// 인스턴스 변수
private String name;
private int age;
// 생성자
public Friend(String name, int age) {
this.name = name;
this.age = age;
}
// setter, getter
public String getName() {
return name;
}
public void setName(String name) {
this.name=name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
\TestObjectnit2.java
package step3;
// 객체 초기화 단계 공부 예제
public class TestObjectInit2 {
public static void main(String[] args) {
Friend f = new Friend("밀크", 10);
System.out.println(f.getName()+" "+f.getAge()+"세");
}
}
[ Relation ]
Association
\TestAssociation.java
package step5;
public class TestAssociation {
public static void main(String[] args) {
Person p = new Person();
p.tour("BMW");
}
}
\RentCar.java
package step5;
public class RentCar {
private String model;
public RentCar(String model) {
this.model = model;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
}
\Person.java
package step5;
public class Person {
/*
* Association 관계(use a)는
* '사람이 렌트카를 사용하다'와 같이,
* 메서드에서 일시적으로 RentCar객체를 사용하므로
* association 관계이다.
*/
public void tour(String item) {
RentCar car = new RentCar(item);
System.out.println(car.getModel()+" 타고 여행하다");
}
}
Aggregation
\TestAggregation.java
package step6;
/*
* 객체 간의 관계
* association > aggregation
* use a has a
*/
public class TestAggregation {
public static void main(String[] args) {
// 사람은 스마트 폰을 가지고 사용한다
// 필요한 Class는? Person, SmartPhone
Person p = new Person("이동욱");
System.out.println(p.getName()); // 이동욱
p.setSmartPhone(new SmartPhone("갤9", 100));
System.out.println(p.getSmartPhone().getModel()); // 갤9
// 이동욱님의 폰 가격을 출력해보자
System.out.println(p.getSmartPhone().getPrice()+"원"); //100원
}
}
Person.java
package step6;
public class Person {
private String name;
// SmartPhone은 클래스명이자 참조형 데이터 타입이다!
private SmartPhone smartPhone;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public SmartPhone getSmartPhone() {
return smartPhone;
}
public void setSmartPhone(SmartPhone smartPhone) {
this.smartPhone = smartPhone;
}
}
\SmartPhone.java
package step6;
public class SmartPhone {
private String model;
private int price;
public SmartPhone(String model, int price) {
this.model = model;
this.price = price;
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
}
Composition
\TestComposition.java
package step2;
public class TestComposition {
public static void main(String[] args) {
Car car = new Car("소나타");
System.out.println(car.getModel()); // 소나타
System.out.println(car.getEngine()); // 엔진 주소값
System.out.println(car.getEngine().getType()); // L4
System.out.println(car.getEngine().getDisplacement()); // 2000
}
}
\Car.java
package step2;
public class Car {
private String model;
private Engine engine;
/*
* Car와 Engine은 Composition(consist of)관계
* Car 생성자(Car객체 생성 시 실행되는 요소)가 실행될 때
* 먼저 Engine 객체부터 생성되도록 구성한다
*/
public Car(String model) {
this.model = model;
this.engine = new Engine("L4", "2000");
}
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public Engine getEngine() {
return engine;
}
public void setEngine(Engine engine) {
this.engine = engine;
}
}
\Engine.java
package step2;
public class Engine {
private String type;
private String displacement;
public Engine(String type, String displacement) {
this.type = type;
this.displacement = displacement;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public String getDisplacement() {
return displacement;
}
public void setDisplacement(String displacement) {
this.displacement = displacement;
}
}
728x90
반응형
'JAVA SE > Code' 카테고리의 다른 글
CODE [20.07.17/Day_08] Java SE / 접근제어자, Inheritance 상속 (0) | 2020.07.17 |
---|---|
[20.07.15/Day_06] Java SE / Array 배열 (0) | 2020.07.15 |
[20.07.13/Day_04] Java SE / 연산자, 제어문(조건문,반복문) (1) | 2020.07.13 |
[20.07.10/Day_03] Java SE / Encapsulation, Constructor, Data Type (0) | 2020.07.10 |
[20.07.09/Day_02] Java SE / Class, Object, variable, method 활용 (0) | 2020.07.09 |