클래스와 객체
객체지향 프로그래밍이란 객체가 중심이 되는 프로그래밍 패러다임을 일컷는 용어입니다.
객체 (object)
- 사전적 의미 : 어떠한 물건이나 대상
- 프로그래밍에서의 의미 : 프로그램에서 표현하고자 하는 기능을 묶기 위한 단위
객체를 구성하는 단위
- 객체를 이루는 것은 데이터와 기능이다.
- 데이터는 변수로 표현된다.
-객체 안에 포함된 변수를 멤버변수 혹은 프로퍼티라 한다. - 기능은 메서드(=함수)로 표현된다.
클래스 (Class)
객체의 설계도 역할을 하는 프로그램 소스
공장에서 하나의 설계도를 사용하여 여러 개의 제품을 생산할 수 있는 것처럼 하나의 클래스를 통해 동일한 구조를 갖는 객체를 여러 개 생성할 수 있다.
###클래스의 가장 기본적인 코드 형식
class 클래스이름 {
// 변수들 선언부분
// 메서드 정의부분
}
클래스 이름은 명사들의 조합으로 이루어지며 첫 글자는 대문자로 지정하는 것이 관례이다.
클래스를 통한 객체 생성하기
new
예약어를 사용한다.
클래스이름 변수이름 = new 클래스이름();
위와 같이 정의하면 변수는 클래스 안에 정의된 모든 기능을 부여받은 특수한 형태의 변수가 되는데 이를 객체라고 한다.
객체에게 부여된 기능은 점(.)을 통해 접근할 수 있다.
객체.멤버변수 = 값;
객체.메서드();
클래스의 작성 패턴
- 변수만 정의
- 메서드만 정의
- 변수와 메서드를 함께 정의
객체라는 개념은 배열이 같은 종류의 변수들만 그룹화 하는 한계를 벗어나 서로 다른 종류의 변수를 그룹화 하는데서 출발한다. (이 상태를 C언어의 구조체라고 한다.)
그렇게 그룹화 해 놓은 변수들간의 관계를 구현하기 위해 메서드를 함께 포함하는 형태로 발전된 것이다.
변수만 갖는 클래스
SimpleMember.java
// public 클래스는 하나의 소스파일에서 단 하나만 존재할 수 있다.
class Member {
String userName = "이름";
String email = "이메일";
int age = 0;
}
// public 클래스의 이름은 소스파일 이름과 동일해야 한다.
public class SimpleMember{
public static void main(String[] args) {
// 같은 클래스에서 생성된 두 개의 객체는 동일한 구조와 값을 갖는다.
Member m1 = new Member();
System.out.println(m1.userName);
System.out.println(m1.email);
System.out.println(m1.age);
Member m2 = new Member(); // m2라는 변수에 class배열의 시작주소값만 저장!
System.out.println(m2.userName);
System.out.println(m2.email);
System.out.println(m2.age);
// 이렇게 생성된 객체들은 서로 개별적인 값을 갖도록 수정 할 수 있다.
m1.userName = "민혁";
m1.email = "mh@gmail.com"
m1.age = 20;
m2.userName = "철수";
m2.email = "cs@gmail.com"
m2.age = 19;
System.out.println(m1.userName);
System.out.println(m1.email);
System.out.println(m1.age);
System.out.println(m2.userName);
System.out.println(m2.email);
System.out.println(m2.age);
}
}
출력결과
이름
이메일
0
이름
이메일
0
민혁
mh@gmail.com
20
철수
cs@gmail.com
메서드만 갖는 클래스
SimpleCalc
class Calc{
public int plus(int x, int y){
return x + y;
}
public int minus(int x, int y){
return x - y;
}
}
public class SimpleCalc{
public static void main(String[] args) {
Calc c = new Calc();
System.out.println(c.plus(1,2));
System.out.println(c.minus(10,5));
}
}
출력결과
3
5
메서드와 변수를 함께 갖는 클래스
SimpleAccount.java
class Account {
/** 멤버변수 영역 */
// 멤버변수의 스코프는 클래스 내의 모든 메서드에서 식별 가능하다.
// 결국 멤버변수는 모든 메서드가 공유하는 전역 변수의 개념이 된다.
// 메서드 안에서 파라미터나 일반 변수와 구분하기 위해
// 멤버변수 앞에는 "this"를 적용할 수 있다.
// --> this는 현재 객체라는 의미.
String name;
int age;
String getName() { return this.name;}
void setName(String name) { this.name = name;}
int getAge() { return this.age;}
void setAge(int age) { this.age = age;}
// 변수를 하나가지고 get, set 두개의 메서드가 동작함을 알수가있다.
void say() {
System.out.println(this.getName());
System.out.println(this.getAge());
}
}
public class SimpleAccount {
public static void main(String[] args) {
Account user = new Account();
user.setName("자바학생");
user.setAge(20);
user.say();
}
}
출력결과
자바학생
20
SimpleMessage
class HelloWorld {
/** 멤버변수 영역 */
// 멥버변수의 스코프는 클래스 내의 모든 메서드에서 식별가능하다.
// 결국 멤버변수는 모든 메서드가 공유하는 전역 변수의 개념이 된다.
String message;
void sayHello() { System.out.println(message); }
void setEng() { message = "Hello java"; }
void setKor() { message = "안녕하세요. 자바"; }
}
public class SimpleMessage {
public static void main(String[] args) {
HelloWorld hello = new HelloWorld();
// 메서드의 호출
hello.setEng();
hello.sayHello();
hello.setKor();
hello.sayHello();
}
}
출력결과
Hello java
안녕하세요. 자바
'코딩 공부 > Java' 카테고리의 다른 글
[Java] 18_MyBatis 설정하기 (0) | 2020.05.12 |
---|---|
[Java] 17_DAO 패턴 (0) | 2020.05.12 |
[Java] 16_생성자 (0) | 2020.05.08 |
[Java] 17_은닉성 (0) | 2020.05.08 |
[Java] 14_재귀호출 (0) | 2020.05.08 |