본문 바로가기
Study/Java

[Java] Object Oriented Programming - OOP 1

by JYHAN 2020. 7. 23.

OOP 의 특징

 

Encapsulation : 하나의 클래스 안에 데이터와 기능을 담아 정의하고, 중요한 데이터나 복잡한 기능
등은 숨기고, 외부에서 사용에 필요한 기능만을 공개하는 것

 

Inheritance : 객체 정의 시 기존에 존재하는 객체의 속성과 기능을 상속받아 정의하는 것

 

Polymorphism(다형성) : 같은 타입 또는 같은 기능의 호출로 다양한 효과를 가져오는 것

 

Abstraction(추상화) : 현실 세계에 존재하는 객체의 주요특징을 추출하는 과정

 

 

1. Class 분류

2. Class 만들기

Class를 만들기 전에 먼저 2가지를 생각해야 한다

  • 정적인 특성(attribute)
  • 동적인 특성(behavior)

이러한 특성은 어떤 시스템에서  class가 사용되느냐에 따라 다르게 정의된다

// public -> modifier(제어관련)
public class Phone{
	// Class Name

	// attributes (member variables)
	public String name;
	public char color;
	public int price;
    
	// behavior (methods)
	public int getRealDebt(){ 
		return 10000;
	}
}

3. Class 사용하기

public class PhoneTest{
	public static void main(String[] args){ // Entry Point
		Phone phone = new Phone();  // Object = new Constructor
        
		// member variables
		phone.name = "IPHone";
		phone.color = 'B';
		phone.price = 10000;
        
		// method call
        System.out.println(phone.getRealDebt());
	}
}

Heap에 'Phone'이라는 객체를 만들고 변수로 선언한 'phone'에 주소값을 저장한다

Class Type으로 변수를 선언, new 라는 키워드를 사용하고 그 뒤에는 생성자(Constructor)가 온다

new 뒤의 생성자를 보고 그에 맞게 memory allocation을 수행한다

생성자는(Constructor)는 Class 이름 + () 구조를 가지고 있다

 

method와 비슷하게 생긴 생성자, 하지만 우리는 생성자를 만들지 않았다

그렇다면 Phone()이라는 생성자는 어덯게 호출되는 것일까?

 

만약, Class가 제공하는 생성자가 없을 경우, Compiler가 기본생성자(Default Constructor)를 자동으로 만든다

기본 생성자는 Parameter가 없는 특별한 작업을 수행하지 않는 가장 단순한 생성자이다

public class Phone{
    public String color;
}

public class PhoneTest{
    public static void main(String[] args){
        Phone phone = new Phone(); //기본 생성자
}

 

생성자를 만들 경우, Compiler는 아무런 생성자를 만들지 않는다. 생성자는 Parameter를 가질 수 있다

따라서, 첫번째 코드의 경우 생성자에 parameter가 없기 때문에 Error가 발생한다!!

public class Phone{ // ERROR!!!!
    public String color;
    public Phone(String color){
        this.color = color;
    }
    public String getColor(){
        return this.color;
    }
}

public class PhoneTest{
    public static void main(String[] args){
        Phone phone = new Phone(); // ERROR!!!!
}

 

 

public class Phone{
    public String color;
    public Phone(String color){
        this.color = color;
    }
    public String getColor(){
        return this.color;
    }
}

public class PhoneTest{
    public static void main(String[] args){
        Phone phone = new Phone("Black");
        phone.getColor();
}

----- result -----
Black

 

서로 다른 생성자로 객체 만들기

//public -> modifier(제어관련)
public class Phone{
	// Class Name

	// attributes (member variables)
	public String name;
	public char color;
	public int price;
 
	// behavior (methods)
	public int getRealDebt(){ 
		return this.price;
	}
	
	public Phone(String name) {
		this.name = name;
		System.out.println("AAA");
		System.out.println(this.name);
	}
	
	public Phone() {
		System.out.println("B");
		System.out.println(this.name);
	}
}

public class PhoneTest{
	public static void main(String[] args){ // Entry Point
		Phone phoneA = new Phone("A"); // Object = new Constructor
		Phone phoneB = new Phone(); // Object = new Constructor
	}
}

----- result -----
A
A
B
null

 

 

Access Modifier

구분 Same Class Same Package Sub Class Universe
private O X X X
(default) O O X X
protected O O O X
public O O O O

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

[Java] Call By Value, Call by Reference  (0) 2020.07.25
[Java] Object Oriented Programming - OOP 2  (0) 2020.07.23
[Java] 논리연산 & 비트연산  (0) 2020.07.22
[Java/JSP] Servlet 맵핑  (0) 2020.07.08
[Java/JSP] JSP & Servlet 이란  (0) 2020.07.04

댓글