클래스의 개념
여러 유사 객체들이 공통적으로 갖는 속성이나 행위를 기술하는 명세 장치,
객체를 정의하는 틀 또는 설계도와 같다.
클래스의 특성
(1) 고유한 이름을 가진다. (중복될 수 없음)
(2) 속성을 지닌다.
→ 클래스는 의미 있는 정보 저장소 역할을 하기 위해 속성을 내표한다.
→ 속성(Property 또는 Attribute)을 자바 언어와 같은 구현 관점에서는 상태 변수, 멤버 변수 혹은 멤버 데이터 등을 표현한다.
→ 클래스는 상태(값)을 갖지는 않고 다만 속성 선언만 할 뿐이다. 상태는 개별 객체들이 갖게 된다.
(3) 잘 정의된 행위를 가진다.
→ 행위란 클래스가 내포하고 있는 속성들을 사용하여 처리하는 기능을 의미단다.
→ 행위를 구현 관점에서 표현하면 메소드, 멤버함수라 할 수 있다.
클래스와 객체
객체란?
: 자신의 속성을 가지고 있으면서 식별 가능한 것.
(1) 클래스는 틀이고 객체는 실사례이다.
//ex) 고객(Customer) 클래스 정의
class Customer{
String userId;
String password;
String name;
public void addCustomer() {...};
public void updateCustomer() {...};
....
}
//Customer 클래스로부터 c1 객체 생성
Customer c1 = new Customer();
(2) 클래스는 상태가 없고 객체는 있다.
→ 클래스는 속성에 대한 선언만 내포하고 있는 반면에 객체는 선언된 각 속성들에 대해 값을 지닌다.
이러한 값을 객체의 상태라고 표현한다.
(3) 클래스와 객체는 동일한 속성(=필드)수와 메소드 수를 갖는다.
→ 한 클래스로부터 생성되는 객체들의 속성이나 메소드 수는 동일한다.
클래스의 속성
속성(=프로퍼티, 어트리뷰트, 필드)
: 객체의 상태를 나타내는 것으로 필드 또는 속성이라 한다.
→ 클래스의 필수 항목으로서 한 클래스 내에서 유일한 속성명을 가져야 한다.
→ 가시성, 속성명, 데이터 타입 순으로 표기되며 초기값을 선택적으로 지정할 수 있다.
가시성
→ 객체지향 개념의 정보은닉을 설계하기 위한 도구로서 정보나 행위의 접근 여부를 결정할 수 있다.
public : 전체 접근 가능
protected : 같은 패키지 내, 후손 클래스 안에서 가능
default : 같은 패키지 내에서 가능
private : 해당 클래스 내부에서만 접근 가능(외부에서 접근할 수 없음)
데이터 타입
→ 기본 데이터 타입이나 객체 타입으로 정의 될 수 있다.
→ 기본 데이터 타입은 개발 프로그래밍 언어의 특성에 맞게 정의 될 수 있다.
→ 객체 타입은 다른 클래스를 타입으로 정의하여 복합 객체를 설계할 수 있다.
클래스의 행위
행위(=함수, 메소드)
: JAVA에서 특정 기능을 처리, 다른 프로그래밍 언어에서는 함수 또는 멤버 함수라고도 부름.
→ 클래스의 행위는 가시성, 행위명, 매개변수, 데이터 타입 순으로 표기 된다.
행위 가시성
public, private, potected, friendly를 이용하여 정의할 수 있다.
행위명
→ 동사로 정의하여 기능에 대한 명확성을 줄 수 있도록 한다.
→ 행위명 만을 통해서 기능의 의미를 파악할 수 있도록 한다.
→ 유일할 필요는 없으며 동일한 행위는 매개변수의 구성(매개변수의 개수 및 매개변수의 데이터 타입)에 따라 다양하게 정의할 수 있다. (오버로딩(Overloading))
클래스 예제(1)_메소드와 객체
public class Ex17 { //public -> 전체 접근가능한 Ex클래스
public int increase(int n) { //increase 메소드
++n;
return n;
}
public static void main(String[] args) { //메인메소드
int var1 = 100;
Ex17 val = new Ex17(); //클래스 객체 생성
int result = val.increase(var1);
//객체를 통해 Ex17 클래스 안의 increase 메소드 사용
//객체의 메소드를 활용해 result에 연산 결과를 저장
//var1=100을 매개변수로 넣어줬으니 ++var1이 실행되어 101을 리턴
System.out.println("varl1 : " + var1 + ", result : " + result);
//리턴값은 받아오지만 메인메소드에 저장된 var1의 값은 변하지 않는다.
}
}
클래스 예제(2)_필드 변수와 메소드, 객체
public class Ex13Rectangel {
//필드(=속성, 프로퍼티, 어트리뷰트) 변수
int width;
int height;
//사각형의 면적을 구하는 메소드(=함수, 행위)
public int getArea() {
return width * height;
}
}
//너비와 높이를 입력 받아 사각형의 합을 출력하는 프로그램
//너비(width)와 높이(height)필드, 그리고 면적 값을 제공하는 getArea() 메소드를 가진
//Rectangle 클래스는 만들어 활용(Ex13으로 함)
import java.util.Scanner;
public class Ex13 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in); //스캐너 클래스 선언 및 초기화
Ex13Rectangel rectangle = new Ex13Rectangel(); //Ex13Rectangle클래스의 객체 생성
System.out.print(">>");
rectangle.width = scan.nextInt(); //rectangle객체 width필드에 입력값 저장
rectangle.height = scan.nextInt(); //rectangle객체 height필드에 입력값 저장
int answer = rectangle.getArea(); //getArea 메소드값 변수 answer에 저장
System.out.println("사각형의 면적은 " + answer);
scan.close(); //스캐너 사용 후 닫아주기
}
}
'JAVA' 카테고리의 다른 글
JAVA 공백제거 방법 3가지 trim, replaceAll, charAt (0) | 2022.03.04 |
---|---|
JAVA 메소드 오버로딩(overloading)이란? (0) | 2022.03.03 |
JAVA 문자열비교 equals 메소드( == 연산자와 차이점) 예제/문제 (0) | 2022.02.26 |
JAVA 문자열 substring, index ,임의의 학번 부여, 생년월일 출력 문제 (0) | 2022.02.23 |
JAVA Random 클래스 랜덤 메소드 (랜덤 전화번호 만들기) (0) | 2022.02.21 |
댓글