본문 바로가기

프로그래밍 언어/JAVA

[NO.3] 클래스와 객체

반응형

객체지향언어(Object Oriented Language)란?

JAVA = 객체 지향 언어

 

절차 지향 언어

: 실행하고자 하는 절차를 정하고, 이 절차대로 프로그래밍하는 방법 (목적을 달성하기 위한 일의 흐름에 중점을 둠)

 

객체 지향 언어

: 실제 세상에 가깝게 모델링하여 실제 세상의 물체를 객체로 표현하고, 객체들의 관계, 상호 작용을 설계한 뒤, 각 객체를 클래스로 작성하는 듯 객체를 만들고 프로그래밍하는 방법


객체지향언어의 특징

캡슐화 (Encapsulation) 

 

객체를 캡슐로 감싸서 내부를 보호하고 볼 수 없게 하는 것으로 객체의 가장 본질적인 특성

 

상속 (Inheritance)

 

자식 클래스가 부모 클래스의 속성을 물려받고 기능을 추가하여 확장(extends)하는 개념

(부모 클래스 = 슈퍼 클래스 | 자식 클래스 = 서브 클래스)

 

다형성(Polymorphism)

 

같은 이름의 메소드가 클래스 혹은 객체에 따라 다르게 동작하도록 구현되는 것을 의미

 

     → 오버라이딩(overriding) : 슈퍼 클래스에 구현된 메소드를, 서브 클래스에서 동일한 이름으로 자신의 특징에 맞게 다시 구현하는 것

     오버로딩(overloading) : 클래스 내에서 이름이 같지만 서로 다르게 동작하는 메소드를 여러 개 만드는 것

 


객체지향언어의 목적

소프트웨어의 생산성 향상

 

컴퓨터 산업 발전 → 소프트웨어가 나오고 사라지는 주기가 짧아짐 → 짧은 시간 내에 소프트웨어 제작해야함

→ 이러한 목적을 충족시키기 위해, 객체, 캡슐화, 상속, 다형성 등 소프트웨어의 재사용을 위한 여러 기법들을 가진 객체 지향 언어가 탄생

 

실세계에 대한 쉬운 모델링

 

실세계의 일을 프로그래밍 해야하는 경우가 많아짐 → 이를 절차 지향 언어를 이용하여 일련의 절차로 묘사하는 것은 힘듦 

→ 즉, 이런건 일과 관련된 많은 객체들의 상화작용으로 묘사하는 것(객체 지향 언어)이 더 적합

 


클래스와 객체

 

클래스: 객체를 만들어 내기 위한 설계도 혹은 특

객체: 클래스 모양 그대로 생성된 실체 ↔  클래스의 인스턴스(instance)

 

클래스 
  • 필드(멤버 변수)
  • 메소드(멤버 함수)
public class Circle {		// (1) 클래스: 접근권한 클래스선언 클래스이름
	public int radius;	// (2) 필드
    public String name;		// (2) 필드
    
    public Circle() {}		// (3) 메소드
    
    public double getArea() {	// (3) 메소드
    	return 3.14*radius*radius;
    }
}

 

 

객체 생성 (new 연산자)
public static void main(String [] args) {
	Circle pizza;			// (1) 레퍼런스 변수 선언: Circle객체에 대한 레피런스 변수 Pizza
    pizza = new Circle();		// (2) 객체 생성: Circle 객체 생성
    
    pizza.radius = 10;			// (3) 필드(객체 멤버) 접근
    pizza.name = "자바피자";		// (3) 필드(객체 멤버) 접근
    double area = pizza.getArea();	// (4) 메소드(객체 멤버) 접근: pizza 면적 알아내기
}

 

생성자(constructor)

객체가 생성될 때 객체의 초기화를 위해 실행되는 메소드 (객체가 생성되는 순간 자동 호출)

 

  • 생성자의 이름은 클래스 이름과 동일하다
  • 생성자는 여러개 작성(오버로딩)할 수 있다.
  • 생성자는 new를 통해 객체를 생성할 때 한 번만 호출된다.
  • 생성자에 리턴타입을 지정할 수 없다.
  • 생성자의 목적은 객체가 생성될 때, 필요한 초기 작업을 위함이다.

 

+ 기본 생성자 : 생성자가 하나도 없을 경우, 컴파일러가 매개변수가 없는 기본 생성자를 만들어준다

 


this 레퍼런스

객체 자신을 가리키는 레퍼러스 ↔ 현재 실행되는 메소드가 속한 객체에 대한 레퍼런스

 

int radius;

public Circle() {
	this(10);
    /*
    *  (1) this()는 반드시 생성자 코드에서만 호출 가능
    *  (2) this()는 반드시 같은 클래스 내 다른 생성자를 호출할 때 사용
    *  (3) this()는 반드시 생성자의 첫 번째 문장이 되어야 함
    */
}

public Circle(int radius) {
	this.radius = radius;
}

 


객체 배열

자바에서 기본 타입 데이터 뿐만 아니라, 객체를 원소로 하는 객체 배열도 만들수 있다.
자바의 객체 배열 → 객체에 대한 레퍼런스를 원소로 갖는 배열 

 

Circle [] c;

c = new Circle[5];			// Circle 객체에 대한 레퍼런스 5개 생성

for(int i=0;i<c.length;i++){		// c.length는 배열 c의 크기로서 5
	c[i] = new Circle(i);		// i 번째 Circle 객체 생성
}

클래스 접근 지정 / Static / Final

 

멤버에 접근하는
클래스
멤버의 접근 지정자
private 디폴트 protected public
같은 패키지의 클래스 X O O O
다른 패키지의 클래스 X X X O
접근 가능 영역 클래스 내 동일 패키지 내 동일 패키지와
자식 클래스
모든 클래스

 

Static 멤버

 

객체를 생성하지 않고도 사용할 수 있는 멤버

하나만 생성되는 멤버로 동일한 클래스의 모든 객체들이 공유한다 (main 메소드가 실행되기 전에 생성된다)

 

Final 

 

final class 클래스: 클래스를 상속받을 수 없음을 지정

final 메소드: 오버라이딩 할 수 없는 메소드임을 선언

final 필드: 상수 

반응형

'프로그래밍 언어 > JAVA' 카테고리의 다른 글

[No.5] 모듈과 패키지, 자바 기본 패키지  (0) 2023.01.04
[NO.4] 상속  (0) 2022.12.30
[NO.2] 반복문과 배열 그리고 예외 처리  (0) 2022.12.29
[NO.1] JAVA 기본 프로그래밍  (0) 2022.12.29
[NO.0] JAVA란?  (0) 2022.12.29