개발도생's Blog
[7Days] Study_객체 지향 언어(Java) 본문
프로그래밍 언어 중 'Java'는 객체 지향 언어이다.
현실 세계는 사물이나 개념처럼 독립되고 구분되는 각각의 객체로 이루어져 있으며,
발생하는 모든 사건들을 객체 간의 상호 작용하는 이 개념을 컴퓨터로 옮겨 놓아 만들어낸 것이
'객체 지향 언어'
객체 지향 언어인'Java'는 아래와 같은 특징을 가지고 있다.
1. 자바는 운영체제와는 독립적으로 실행할 수 있다.
2. 자바는 불필요한 기능을 과감히 제거하여 다른 언어에 비해 배우기가 쉽다.
3. 자바는 자동 메모리 관리 등을 지원하여 다른 언어에 비해 안정성이 높다
4. 자바는 연산자 오버로딩을 금지하고 제네릭을 도입함으로써 코드의 가독성을 높였다.
5. 자바에 관한 수많은 참고 자료를 찾을 수 있다.
Class
객체의 특성에 대한 정의를 한 것으로 캡슐화를 통해 기능을 포함한 개념이다.
사물이나 개념의 공통 요소를 추상화(abstraction)하여 정의한 것.
추상화(Abstraction)
유연성을 확보하기 위해 구체적인 것은 제거한다는 의미다.
프로그램에서 필요한 공통점을 추출하고,
불필요한 공통점을 제거하는 과정이다.
추상화의 예시로,
회원 관리 프로그램에서 요구되는 '개인 정보'를 추상화한다면 아래와 같은 표로 정리할 수 있을 것이다.
객체 지향 언어의 특징
1. 캡슐화(Encapsulation)
캡슐화란 클래스 안에 서로 연관 있는 속성과 기능들을 하나의 캡슐(capsule)로 만들어
데이터를 외부로부터 보호하는 것이다.
서로 관련 있는 데이터와 이를 처리할 수 있는 기능들을 한 곳에 모아 관리하는 것이다.
객체 지향 프로그래밍에서 이렇게 캡슐화를 하는 이유로 크게 두 가지로 이야기할 수 있다.
1. 데이터 보호(data protection) – 외부로부터 클래스에 정의된 속성과 기능들을 보호
2. 데이터 은닉(data hiding) – 내부의 동작을 감추고 외부에는 필요한 부분만 노출
객체 지향 프로그래밍에서 캡슐화를 구현하기 위한 방법으로,
접근제어자(Access Modifiers)를 활용하는 것이 있다.
접근 제한자
public
단어 뜻 그대로 외부 클래스가 자유롭게 사용할 수 있도록 합니다.
protected
같은 패키지 또는 자식 클래스에서 사용할 수 있도록 합니다.
private
단어 뜻 그대로 개인적인 것이라 외부에서 사용될 수 없도록 합니다.
default
같은 패키지에 소속된 클래스에서만 사용할 수 있도록 합니다.
2. 상속(Inheritance)
상속이란 기존의 클래스를 재활용하여 새로운 클래스를 작성하는 자바의 문법 요소를 의미한다.
클래스들 간 공유하는 속성과 기능들을 반복적으로 정의할 필요 없다.
한 번만 정의해 두고 간편하게 재사용할 수 있다.
반복적인 코드를 최소화하고 공유하는 속성과 기능에 간편하게 접근하여 사용할 수 있도록 해준다.
3. 다형성(Polymorphism)
다형성이란 어떤 객체의 속성이나 기능이 상황에 따라 여러 가지 형태를 가질 수 있는 성질을 의미한다.
어떤 객체의 속성이나 기능이 그 맥락에 따라 다른 역할을 수행할 수 있는 객체 지향의 특성을 가지고 있다.
대표적인 예로 우리가 앞서 본 메서드 오버라이딩과 메서드 오버로딩(Method Overloading)이 있다.
객체 지향 언어인 자바에 대해 추가적으로 지식을 필요한다면,
아래의 링크에서 확인할 수 있다.
클래스(Class), 객체(Object), 인스턴스(Instance)
"기본 개념"에 대한 공부를 하다가 정리해두면 좋을 것 같았다. 먼저 클래스와 객체, 인스턴스를 알기 전 객체 지향의 개념을 훑고 넘어가는 것이 좋을 듯하다. 객체 지향 언어란 컴퓨터 프로그
nan-o-nuel-do.tistory.com
위의 내용처럼 이론적인 내용도 중요하지만,
직접 사용해 보고 경험해 보는 것이 가장 큰 도움이 될 것이다.
그래서 직접 실습을 통해 공부해 봤다.
먼저 'exam01'이라는 'Package'에 세 개의 Class를 생성해 주었다.
객체를 생성해서 값을 출력하기 위한 'Main' Class다.
package exam01;
public class Main {
public static void main(String[] args) {
/*
* Java_객체 지향 언어
* 자바(Java)는 C++과는 달리 처음부터 객체 지향 언어로 개발된 프로그래밍 언어입니다.
* 또한, 자바는 자바 가상 머신(JVM)을 사용하여 어느 운영체제에서나 같은 형태로 실행될 수 있습니다.
* 현재 자바는 전 세계에서 가장 많이 사용하는 프로그래밍 언어 중 하나입니다.
*/
// Person Class로 만든 객체와 인스턴스
Person p1 = new Person();
System.out.println("나이 : " + p1.Upage(5) + "살");
p1.setPrint("개발도생");
System.out.println("이름 : " + p1.getPrint());
// Member Class로 만든 객체와 인스턴스
Member m1 = new Member();
m1.setName("안녕하세요.");
System.out.println(m1.getName());
m1.setName("반갑습니다.");
System.out.println(m1.getName());
}
}
위와 같은 코드로 출력하게 되면 아래와 같은 값을 확인할 수 있다.
아래 두 개의 Class를 생성하고 Main Class에서 객체를 생성했다.
인스턴스를 활용해 'Person', 'Member' Class 내부에 작성 돼 있는 Method를 사용할 수 있는 것이다.
Person과 Member Class의 멤버 변수가 위에서 언급한 '추상화' 개념이라고 이해하면 좋을 것 같다.
각각의 Class에서 Method를 생성할 때는 접근 제한자와 반환 타입을 반드시 입력해주어야 한다.
반환 타입에 따라서 return과 this를 사용하게 되는데,
해당 내용에 대해서는 조금 더 공부해서 보다 자세하게 기록해야겠다.
package exam01;
public class Person {
private String pNo;
private String name;
private char gender;
private String address;
private String phone;
private int age;
public int Upage(int num) {
return age += num;
}
public String getPrint() {
return name;
}
public void setPrint(String name) {
this.name = name;
}
}
package exam01;
public class Member {
private String name;
private int age;
/*
* 생성자
* - 생성자는 Class 이름과 같다.
* - 생성자는 반환 타입이 없다.
*/
public Member() {
}
/*
* void란, return 되는 타입이 없음을 의미
*
* 반환 타입이 void 일 경우에는 리턴 타입이 없다.
* - return 문이 없는 Method 를 만들 때 void 키워드를 사용한다.
*
* 반환 타입이 void가 아닌 경우에는 필수적으로 return 문이 존재해야 한다.
* - 클래스내의 어떠한 메소드가 실행되고 해당 메소드 실행에 따라
* 나온 값을 호출한 곳에서 돌려받고자 할 때 사용한다.
* - 위와 같은 경우는 return 명령어 뒤에 반환하고자 하는 값 또는 변수를 써주면 된다.
* Ex) return 변수;
*/
// 반환 타입 : String
public String getName() {
return name;
}
// 반환 타입 : void
public void setName(String name) {
this.name = name;
}
// 반환 타입 : int
public int getAge() {
return age;
}
// 반환 타입 : void
public void setAge(int age) {
this.age = age;
}
}
조금 더 자세한 내용으로 다루고 싶지만 머리로는 이해가 되는 것을 글로 표현하는 것이 아직은 너무 어렵다.
공부를 하면서 이론의 정확한 이해가 얼마나 중요한 것인지 또 한 번 느끼게 됐다.
지금보다 더욱 성장해서 더 나은 지식을 정확하고 이해하기 쉽게 공유할 수 있기를 기대한다.
개린이가 개고수가 되는 그날까지!
'개발자의 일기 > Study' 카테고리의 다른 글
[9Days] Study_Method (0) | 2023.03.24 |
---|---|
[8Days] Study_Static&Constructor (0) | 2023.03.22 |
[6Days] Study_배열(Array) (0) | 2023.03.15 |
[5Days] Study_가위 바위 보! (2) | 2023.03.13 |
[4Days] Study_반복문(for, while) (2) | 2023.03.11 |