본문 바로가기
Study/Java

[Java] Object Oriented Programming - OOP 2

by JYHAN 2020. 7. 23.

this

this는 인스턴스 자기 자신을 의미하는 참조변수이다

주로 전역변수와 (메서드) 또는 (생성자의 매개변수)가 동일할 때 인스턴스 필드임을 명확히 하기 위해 사용한다

class Car {
    String color; // 인스턴스 변수
    String name; // 인스턴스 변수
    
    Car(String color, String name){
        this.color = color; 
        this.name = name;
    }
}

this 생성자의 매개변수의 이름이 인스턴스 변수와 같을 때, 인스턴스 변수와 지역변수를 구분하기 위해서 사용한다

Car() 생성자 안에서의 this.color는 인스턴스 변수이고, color는 매개변수로 정의된 지역변수이다

단, static 메서드에서는 this를 사용하지 못한다

 

this()

this()는 생성자이다

class Car{
    String color;  // 인스턴스 변수
    String name; // 인스턴스 변수
    
    Car(){
        this("Red", "BMW"); // Car(String color, string name)를 호출
    }
    
    Car(String color){
        this(color, "BENZ");
    }
    
    Car(String color, String name){
        this.color = color; 
        this.name = name;
    }
}

 

this()는 같은 클래스의 다른 생성자를 호출할 때 사용한다

this() 자기 클래스 생성자 호출이기 때문에 생성자에서만 호출할 수 있다, 메소드에서는 불가능하다!!!!

Car() 생성자와 Car(String color) 생성자는 this()를 통해 모두 Car(String color, String name) 생성자를 호출하고 있는 것이다

 

Super

상위 클래스 참조변수

 

Member Variables(멤버변수)

// By Class 정의
public String name = "IPhone XR";
public char color;
public in price;

// By 생성자
Phone phone = new Phone("A");
public Phone(String name){
    this.name = name;
}

// By Direct
Phone phone = new Phone();
phone.name = "Iphone XS"
phone.color = "Red"
phone.price = 10000;

 

멤버변수를 설정하지 않았다면,

class안에 선언된 멤버변수는 new를 통해 객체가 생성될 때 기본 값(Default Value)이 자동으로 설정된다

Default Value

Setter

멤버변수 값을 외부에서 접근할 수 없도록 하고, 대신 멤버변수 하나에 대해 값을 Set 할 수 있는 메서드

Phone phone = new Phone();
phone.setName("IPhone XR");

public void setName(String name){
    this.name = name;
}

 

Getter

외부에서 값을 읽고자 할 때, 직접 읽지 않고 읽을 수 있도록 제공되는 메서드

Phone phone = new Phone("IPhone XR");
public String getName(){
    return this.name;
}

phone.getName();

----- result -----
IPhone XR

setter를 제공했지만, 여전히 멤버변수에 대해 외부에서 접근이 가능하다

따라서 외부에서 직접 access 할 수 없도록 modifer(접근자)를 public에서 private으로 변경한다

private String name;
Phone phone = new Phone();

phone.setName("IPhone XR");

 

Setter & Getter 코드 작성 팁!!!   

클래스 파일에서 마우스 우클릭 → Source → Generate Getters and Setters  →  체크 후 Generate

Setter & Getter 생성

 

Static

변수나 메서드 앞에 static modifer가 있는 것은 객체생성없이 클래스의 이름으로 접근이 가능하다

public class Phone{
    public static void staticMethod() {
		System.out.println("Static!!");
	}
}

public class PhoneTest{
	public static void main(String[] args){ // Entry Point
		Phone.staticMethod(); //객체를 생성하지 않고 사용이 가능
	}
}

----- result -----
Static!!

 

String Class

public static void main(String[] args) {
		int i1 = 10;
		int i2 = 10;
		
		String s1 = "Hello";
		String s2 = "Hello";
		String s3 = new String("Hello");
		String s4 = new String("Hello");
		
		if( i1 == i2 ) { System.out.println("i1 i2 Same"); }
		if( s1 == s2 ) { System.out.println("s1 s2 Same"); }
		if( s3 == s4 ) { System.out.println("s3 s4 Same"); }
}

----- result -----
i1 i2 Same
s1 s2 Same

s3와 s4는 같지 않음에 주의한다!!

== 는 두 변수의 memory 값을 비교한다
i1 과 i2 는 local 변수이므로 Stack에 만들어지고, Primitive Type 이므로 그 변수에 값이 저장된다
s3 와 s4는 각각 new 에 의해 Heap 에 서로 다른 객체를 생성하고 그 주소값을 저장한다
"Hello" ← 객체 상수( 일종의 리터럴 ) 로서 String Constant Pool 에 관리 ( Heap 에 만들어 짐) 되고, 재사용된다

 

 

두 문자열을 비교하는 방법 → String.equals(String)

public static void main(String[] args) {
		String s3 = new String("Hello");
		String s4 = new String("Hello");

		if( s3.equals(s4) ) { System.out.println("s3 s4 Same"); }
}

----- result -----
s3 s4 Same

 

자바 문자 비교 : equals = =

공통점

  • 양쪽의 내용을 비교하여 boolean type을 반환한다

 

차이점

  • equals()는 메소드(객체끼리 내용을 비교할 수 있다), ==은 연산자이다
  • equals()는 비교 대상의 내용을 비교, ==은 주소값을 비교한다

 

 

'Study > Java' 카테고리의 다른 글

[Java] 입출력 API  (0) 2020.08.09
[Java] Call By Value, Call by Reference  (0) 2020.07.25
[Java] Object Oriented Programming - OOP 1  (0) 2020.07.23
[Java] 논리연산 & 비트연산  (0) 2020.07.22
[Java/JSP] Servlet 맵핑  (0) 2020.07.08

댓글