객체지향언어(OOP)
Java는 설계자체를 객체지향언어(OOP)로 만들었다. 그렇기 때문에 class를 쓰지않는 Java는 상상할 수 가 없다. 그렇다면 여기서 객체지향언어란 무엇인가?
OOP(Object-Oriented-Programming)
객체란 세상에 존재하는 모든 것을 의미 즉, 주변의 사물, 생명등을 말한다. 객체지향언어란 프로그래밍 관점에서 객체들의 관계성을 사용하여 순차적으로 프로그램이 돌아가는 것을 객체지향언어라고 생각한다.
객체의 예시
객체는 앞에서 말한 것처럼 우리 주위에 사물들, 생명, 사람, 모든 것을 객체로 표현 할 수 있다.
프로그래밍 관점에서 객체란 객체 = Data + 기능 으로 표현 할 수 있다.
만약 객체를 컴퓨터(PC)라고 생각해보자 그렇다면 컴퓨터의 Data부분과 기능 부분을 표현해보자.
Data(변수) - 모니터, 본체, 키보드, 마우스, 스피커 등등
기능(Method) - 화면출력, 프로그램 실행, 입력, 출력, 등등
이런식으로 하나의 객체를 생각하고 그 객체의 Data와 기능을 생각한다면 더욱 쉽게 객체에 대해 이해할 수 있을 것이다.
객체지향언어(OOP)의 특징
객체지향언어에는 4가지의 특징을 가지고 있다.
- 상속
상속은 상위 class의 모든 것을 상속받아 하위 class에서 사용하는 것을 말한다.(부모와 자식관계, 데이터의 관계성) - 캡슐화
Data와 기능을 외부로부터 접근은 차단하고, 권한 또는 절차 없이 데이터를 변경 또는 기능을 수행할 수 없게 캡슐처럼 보호하는 특징을 가지고 있다.(데이터의 은닉성) - 추상화
추상적인 요소들을 묶어서 분류하는 것 예를 들어 학생, 선생, 학부모등 사람이라는 추상적인 요소로 분류할 수 있다(데이터의 구조화) - 다형성
객체의 기능이 다양한 형태를 가질 수 있다. 상속과 깊은 관계를 가진다. 한 부모 밑에서 태어난 자식이 완전히 같을 수 없듯이 객체 또한 부모 class로 부터 상속 받은 Data와 기능을 자식 class에서 재정의하여 사용할 수 있다.
객체지향언어의 장점
- 재사용성 : 상속을 통해 코드의 재사용을 높일 수 있음
- 생상성 향상 : class 단위의 부품들을 조립하여 사용하기에 생상성을 높일 수 있음
- 유지보수 : 구조화된 소스코드를 class단위로 소스코드를 관리하기에 유지보수가 우수함
객체지향언어의 단점
- 객체를 세분화하여 설계해야하는 단점이 있다.
- 실행속도가 절차지향언어에 비해 느리다.
- 상속으로 이한여 관계가 많이 형성되면 코드의 난이도가 높아진다.절차지향언어 VS 객체지향언어절차지향언어의 반대가 객체지향언어는 아니다. 객체지향언어도 절차지향언어에 속하지만 객체라는 개념이 추가된 것이다. 위의 장단점역시 절차지향언어와 비교한 것이기에 절차지향언어가 좋은언어냐 객체지향언어가 좋은언어인지는 어떠한 프로그램을 구현하에 따라 달라질 것이다.
Class
class란 객체에 대하여 정의한 설계도 혹은 틀을 의미한다.
Object(객체)
class를 통해 구현 할 수 있는 모든 대상을 의미한다 즉, 해당 class로 구현한 instance를 대표하는 의미
Instance
Object가 실제로 메모리상에 있는 상태 또는 실제로 구현한 것을 class의 instance라고 표현한다.
class를 이용해 User라는 class를 구현한 코드
User Class
package j09_클래스;
public class J09_User {
String username;
int password;
String name;
String email;
void printUserInfo() {
System.out.println("아이디 : " + username);
System.out.println("비밀번호 : " + password);
System.out.println("이름 : " + name);
System.out.println("이메일 : " + email);
}
}
UserMain
User class 객체를 생성해서 정보를 입력하고 입력된 정보를 User class 안에있는 멤버 메소드 printInfo를 호출함
package j09_클래스;
public class J09_UserMain {
public static void main(String[] args) {
J09_User u1 = new J09_User();
J09_User u2 = new J09_User();
J09_User u3 = new J09_User();
u1.username = "user1";
u1.password = 1234;
u1.name = "홍길동";
u1.email = "useremail1@naver.com";
u2.username = "user2";
u2.password = 123456;
u2.name = "김민수";
u2.email = "useremail2@gmail.com";
u3.username = "user3";
u3.password = 1234567;
u3.name = "황철수";
u3.email = "useremail3@naver.com";
u1.printUserInfo();
System.out.println();
u2.printUserInfo();
System.out.println();
u3.printUserInfo();
}
}
정리
객체지향언어는 객체의 관계를 이용해 순차적으로 프로그램을 구현한 것이고, 객체지향언어는 상속, 캡슐화, 추상화, 다형성이라는 특징을 가지고 있다. class는 설계도 및 틀을 의미하며 객체는 class를 통해 구현할 수 있는 모든 대상, Instance는 객체가 실제로 구현된 것을 의미한다. 절차지향언어의 반대가 객체지향언어를 의미하는 것은 아니며 각 언어마다 장단점들이 있다.
'Language > Java' 카테고리의 다른 글
[Java] Class 형변환 (0) | 2023.09.14 |
---|---|
[Java] Class의 생성자(Constructor) 및 접근 지정자 (0) | 2023.09.13 |
[Java] Method(함수) (0) | 2023.09.12 |
[Java] 반복문 (0) | 2023.09.12 |
[Java] 조건문 (0) | 2023.09.11 |