728x90
목차
1. 클래스
■ 클래스란?
- 클래스는 참조 자료형으로 자료형을 만드는 개념
- 클래스를 통해 구현할 수 있는 모든 대상을 객체라고 함
- 객체가 실제로 구현된 것을 클래스의 인스턴스라고 표현함
- 메모리를 할당 받은 객체를 인스턴스라고 함
- 예를 들면 클래스는 붕어빵 틀, 객체는 붕어빵, 인스턴스는 만든 붕어빵
- 클래스는 데이터 + 기능으로 구성>
- 데이터는 변수이며 명사로 표기
- 기능은 메소드이며 동사로 표기
- 변수와 메소드는 멤버(동적)와 static(정적)으로 나뉨
- 객체 지향 프로그래밍 언어
2. 객체 지향 프로그래밍
■ 객체 지향 프로그래밍이란?
- 객체 지향 프로그래밍(Object-Oriented Programming)은 객체들 간의 상호작용을 통해 프로그램을 만드는 컴퓨터 프로그래밍의 패러다임 중 하나
- 절차 지향 언어의 반대가 객체 지향 언어가 아니며 객체 지향 언어도 절차 지향 언어에 포함
■ 특징
- 상속은 의미 그대로 상위 클래스의 모든 것을 상속받아 사용하는 것(데이터의 관계성)
- 캡슐화는 데이터와 기능을 외부 접근에 대해 차단하고 권한 또는 절차 없이 데이터를 변경 또는 기능 수행을 할 수 없게 캡슐처럼 보호함(데이터의 은닉성)
- 추상화는 추상적인 요소들(공통적인 요소)을 묶어서 분류하는 것(데이터의 구조화)
- 다형성은 객체의 기능이 다양한 형태를 가질 수 있으며 상속과 깊은 관계를 가짐
■ 장점
- 상속을 통해 코드의 재사용을 높일 수 있음
- 클래스 단위의 부품들을 조립하기 때문에 생산성이 향상됨
- 구조화 된 소스코드를 클래스 단위로 관리할 수 있으므로 유지보수가 우수함
■ 단점
- 객체를 세분화하여 설계하여야함
- 실행 속도가 절차지향 언어 대비해서 느림
- 상속으로 인하여 관계가 많이 형성되면 코딩의 난이도가 높아짐
3. 예시
■ J09_Student
package j09_클래스;
public class J09_Student {
String name = "김";
int age = 100;
// 기본생성자
J09_Student() {
// 기본적으로 생략되어 있음
// 반환 자료형을 우리가 정의할 필요없이 주소값을 리턴하는 자료형
System.out.println("생성됨!!!");
}
void printInfo() {
System.out.println("이름 : " + name);
System.out.println("나이 : " + age);
}
}
■ J09_StudentMain
package j09_클래스;
public class J09_StudentMain {
public static void main(String[] args) {
// J09_Student 클래스를 객체라고 표현, new J09_Student()를 생성하는 생성자를 통해 주소값을 입력하면 인스턴스라고 표현
J09_Student s1 = new J09_Student();
J09_Student s2 = new J09_Student();
System.out.println();
s1.name = "김준일";
s1.age = 30;
s1.printInfo();
s2.printInfo();
J09_Student student1 = new J09_Student(); // 생성자는 클래스명과 일치
J09_Student student2 = new J09_Student();
System.out.println(student1);
System.out.println(student2);
}
}
■ J09_User
package j09_클래스;
public class J09_User {
String username;
String password;
String name;
String email;
public void printUserInfo() {
System.out.println("아이디 : " + username);
System.out.println("비밀번호 : " + password);
System.out.println("이름 : " + name);
System.out.println("이메일 : " + email);
System.out.println();
}
}
■ J09_UserMain
package j09_클래스;
public class J09_UserMain {
public static void main(String[] args) {
J09_User user = new J09_User();
J09_User user1 = new J09_User();
user.username = "aaa";
user.password = "1234";
user.name = "김종환";
user.email = "aaa@gmail.com";
user1.username = "bbb";
user1.password = "1234";
user1.name = "이종현";
user1.email = "bbb@gmail.com";
user.printUserInfo();
user1.printUserInfo();
}
}