JAVA

객체 지향 언어(Object-oriented programming, OOP)/클래스와 객체

yujin0517 2021. 7. 3. 13:59

JAVA 프로그래밍은 객체지향 언어이며, 객체는 모두 고유한 특성과 행동을 가짐. 또한, 다른 객체들과 정보를 주고받는 상호작용을 하면서 존재함.

객체지향의 특성 

  1. 캡슐화 (= 은닉화) 
  2. 상속
  3. 다향성

 

캡슐화

-> 객체를 캡슐로 싸서 내부를 볼 수 없게 하는 것, 외부의 접근으로부터 객체를 보호. 클래스도 객체 모양을 선언한 틀이며, 때문에 메소드와 필드는 모두 클래스 내에 구현됨. 

 

상속

-> 자식 클래스가 부모 클래스의 속성을 모두 가지는 관계를 말 함. 부모 클래스의 속성을 자식 클래스에게 물려줌.            부모/자식 클래스 대신 슈퍼/서브 클래스라고도 부를 수 있음.

* extends 키워드를 사용하여 상속 받음
* 자바에서 상속은 자식 클래스가 부모 클래스를 선택함.

 

다향성

->같은 이름의 메소드가 클래스나 객체에 따라 다르게 동작하도록 구현할 수 있는 것을 다향성이라고 함. 다향성에는 메 소드 오버로딩과 메소드 오버라이딩이 있음. 또한, 상속으로 인한 형변환이 일어나기도 함.

* 오버로딩 : 같은 이름이지만 다르게 작동하는 여러 메소드 / 매개변수의 개수나 타입이 서로 다르면 오버로딩이 일어나지만, 리턴타입과 변수명은 서로 달라도 오버로딩이 일어나지 않음. 

Ex) 함수의 기능은 같지만 매개변수의 개수가 다른 것을 메소드 오버로딩이라고 함.

public int sum(int n1, int n2) {
		return n1 + n2;
}
	
public int sum(int n1, int n2, int n3) { 
	return n1 + n2 + n3;
}

 

* 오버라이딩 : 부모 클래스의 메소드를 자식 클래스마다 다르게 구현하는 것을 오버라이딩이라고 함. / 메소드 이름과 매개변수 타입 및 개수, 리턴 타입등 모든 것이 동일해야함. / 자식 클래스에서 메소드가 수정되었다면 부모 클래스도 수정된 메소드를 따라야함. 

Ex) 상속받은 부모 클래스에 출력코드를 추가해서 사용함.

class Cal{
	public int sum(int n1, int n2) {
		return n1 + n2;
	}
}
class Cal3 extends Cal{           
	public int sum(int n1, int n2) { 
		System.out.println("Cal3 ~~");  //부모 클래스를 수정하여 사용함.
		return n1 + n2;
	}
}

-> 오버로딩은 이름이 같은 메소드를 여러 개 생성할 때 발생하고, 오버라이딩은 자식 클래스가 부모 클래스를 재정의 하는 것이다. 

 

클래스와 객체 

클래스란? 

-> 객체를 만들어내개 위한 설계도 혹은 틀이며, 객체의 속성과 행동을 포함함. 

* 클래스 구성 : 기본적으로 필드, 생성사, 메소드로 구성.

public class Circle {  //Circle 클래스, 클래스 앞에 올 수 있는 접근지정자는 public, 디폴트.
    public int radius;  //반지름 필드
    public String name;  //이름 필드 
    
    public Circle() {}  //기본생성자
    public double getArea() {  //면적 계산 메소드
    	return 3.14*radius*radius;	
    }
}

클래스 괄호 안에 존재하는 변수는 멤버변수, 생성자나 메소드 괄호안에 있는 변수는 지역변수임.

  • - 필드(Field) : 객체의 데이터가 저장되는 곳.
  • - 생성자(Constructor) : 객체 생성시 초기화 역할을 담당, 생성자명은 클래스명과 동일, 리턴값 없음, 여러 개 작성 가능(오버로딩), 객체가 생성될 때 반드시 호출됨. 
  • - 메소드(Method) : 객체의 동작에 해당하는 실행 블록, 리턴값이 없을 경우 void를 적어줘야됨. 

객체란?

-> 클래스의 모양을 그대로 찍어낸 실체, 메모리 공간을 갖는 구체적인 실체. / 인스턴스라고 부르기도 함. 

  • 객체 생성할 때, 반드시 new키워드를 이용하여 생성해야됨.
  • Scanner scanner = new Scanner(System.in); //new키워드 사용
  • 객체의 멤버에 접근하기 위해서는 '변수명.필드' 혹은 '변수명.메소드' 이렇게 접근해야됨.
    public class Circle {
    	public int radius;
        public Circle() {}
        public double getArea() {
       		return 3.14*radius*radius;
        }
        public static void main(String[] args) {
        	Scanner sc = new Scanner(System.in);
            Circle cc = new Circle();  //객체 생성
            cc.radius = 5;    //필드에 접근
            System.out.println(cc.gatArea());  //메소드에 접근
            sc.close();
        }
    }​

 

다음 글에서는 클래스와 객체생성 및 활용을 연습해보겠습니다.

감사합니다!

 

2021.07.03

'JAVA' 카테고리의 다른 글

접근지정자 / setter, getter 메소드  (0) 2021.07.05
클래스와 객체생성 및 활용  (0) 2021.07.05
flag 변수  (0) 2021.07.02
break / continue / switch - case문  (0) 2021.07.01
for 반복문  (0) 2021.06.30