개발자 도전기
[JAVA] 객체와 클래스 본문
객체 지향 프로그래밍
부품들을 하나씩 조립해서 완성품을 만들듯 부품에 해당하는 객체들을 먼저 만들고, 이 객체들을 하나씩 조립해서 완성된 프로그램을 만드는 기법을 객체 지향 프로그래밍이라 한다
1. 객체란?
객체란 물리적으로 존재하거나 개념적인 것 중에서 다른 것과 식별 가능한 것을 말한다.
물리적인 자동차, 사람, 자전거 등과 개념적인 학과, 강의, 주문 등도 모두 객체가 될 수 있다.
객체는 속성과 동작으로 구분된다,
사람은 이름, 나이 등의 속성과 웃다, 걷다 등의 동작이 있다.
속성은 필드, 동작은 메소드이다
현실 세계의 객체를 소프트웨어 객체로 설계하는 것을 객체 모델링이라고 한다.
2. 객체의 상호작용
사람이 컴퓨터를 이용하고, 컴퓨터는 출력 결과를 사람에게 리턴하는 상호작용을 하듯이 객체 지향 프로그램에서도 객체와 객체는 서로 상호작용을 하며 동작한다. 객체들 사이의 상호작용 수단은 메소드이다. 객체가 다른 객체의 기능을 이용할 때 이 메소드를 호출한다.
메소드 호출을 통해 객체들은 데이터를 서로 주고받는다. 메소드 이름과 함께 전달하고자 하는 데이터를 괄호 () 안에 기술하는데, 이러한 데이터를 매개값이라고 한다. 매개값은 메소드가 실행할 때 필요한 값이다. 리턴값은 메소드의 실행 결과이며, 호출한 곳으로 돌려주는 값이다.
3. 객체 간의 관계
객체는 다른 객체들과 관계를 맺고 있다. 관계의 종류에는 집합 관계, 사용 관계, 상속 관계가 있다.
집합 관계
완성품과 부품의 관계를 말한다. 예를 들어 자동차는 엔진, 타이어, 핸들 등으로 구성되므로 자동차와 부품들은 집합 관계라고 볼 수 있다.
사용 관계
다른 객체의 필드를 읽고 변경하거나 메소드를 호출하는 관계를 말한다. 예를 들어 사람이 자동차의 관계가 있다.
상속 관계
부모와 자식 관계를 말한다. 자동차가 기계의 특징을 물려받는다면 기계(부모)와 자동차(자식)은 상속 관계에 있다고 볼 수 있다.
4. 객체 지향 프로그래밍의 특징
캡슐화
객체의 데이터(필드), 동작(메소드)을 하나로 묶고 실제 구현 내용을 외부에 감추는 것을 말한다. 외부 객체는 객체 내부의 구조를 알지 못하며 객체가 노출해서 제공하는 필드와 메소드만 이용할 수 있다.
캡슐화의 이유는 외부의 잘못된 사용으로 객체가 손상되지 않도록 하는 데 있다.
자바 언어는 캡슐화된 멤버를 노출시킬 것인지 숨길 것인지 결정하기 위해 접근 제한자를 사용한다.
상속
객체 지향 프로그래밍에서는 부모 역할의 상위 객체와 자식 역할의 하위 객체가 있다. 부모 객체는 자기가 가지고 있는 필드와 메소드를 자식 객체에게 물려주어 자식 객체가 사용할 수 있도록 한다. 이것이 상속이다. 상속을 하는 이유는 다음과 같다.
- 코드의 재사용성을 높여준다
- 유지 보수 시간을 최소화시켜 준다
다형성
다형성이란 사용 방법은 동일하지만 실행 결과가 다양하게 나오는 성질을 말한다, 자동차의 부품을 교환하면 성능이 다르게 나오듯이 프로그램을 구성하는 객체(부품)을 바꾸면 프로그램의 실행 성능이 다르게 나올 수 있다.
5. 객체와 클래스
객체를 생성할 때에는 설계도가 필요하다. 이때 설계도의 역할을 하는 것이 클래스이다. 클래스로부터 생성된 객체를 인스턴스라고 한다. 그리고 클래스로부터 인스턴스를 만드는 과정을 인스턴스화라고 한다.
6. 객체 생성과 클래스 변수
클래스로부터 객체를 생성하려면 객체 생성 연산자인 new가 필요하다. new 연산자 뒤에는 생성자 호출 코드가 오는데, 클래스() 형태를 가진다. new 연산자는 객체를 생성시킨 후 객체의 주소를 리턴하기 때문에 클래스 변수에 다음과 같이 대입할 수 있다.
클래스 변수 = new 클래스();
클래스 객체는 힙(heap) 영역에 저장되고 클래스 변수는 객체의 주소값을 갖는다.
7. 클래스의 구성 멤버
클래스의 구성 멤버로는 필드, 생성자, 메소드가 있다
필드
객체의 데이터를 저장하는 역할을 한다
생성자
new 연산자로 객체를 생성할 때 객체의 초기화 역할을 담당한다. 선언 형태는 메소드와 비슷하지만, 리턴 타입이 없고 이름은 클래스 이름과 동일하다.
메소드
객체가 수행할 동작이다. 객체 내부의 함수는 메소드라고 부른다
'개발공부 > JAVA' 카테고리의 다른 글
[JAVA] 클래스 - 메소드(method) (0) | 2024.03.04 |
---|---|
[JAVA] 클래스 - 필드(field) (0) | 2024.03.04 |
[JAVA] 형변환 방법 모음 (0) | 2024.03.01 |
[JAVA] String (2) | 2024.03.01 |
[JAVA] 2차원 배열, 다차원 배열 (0) | 2024.02.29 |