20221130
39일차
Java,
사실 자바를 딱 설명하기엔 너무 많은 이론과 역사를 끌고 와야한다.
그럼에도 불구하고 내가 생각했을 때 중요한 개념들을 정리하고자 한다.
Java하면 가장 포인트로 잡는 개념이다.
Ⅰ. Java는 객체 지향적 프로그래밍 언어다.
객체 지향 프로그래밍(Object-Oriented Programming, OOP)
쉽게설명하면
프로그램 = 객체 + 객체
로 만드는 방식이다.
그럼 객체는 무었일까?
💡 객체 (object)
사전적 의미 : 클래스(Class)에서 정의한 것을 토대로 실제 저장공간에 할당된 것.
프로그램에서 사용되는 데이터라고도 불리우며
식별자 에 의해 참조되는 공간을 의미한다.
# 어떤 대상을 유일하게 식별 및 구별할 수 있는 이름
객체는
변수가 될수도 있으며,
자료 구조도 될 수 있고,
함수 또는 메소드도 될 수 있다.
그리고 자바에서 중요한
Class의 인스턴스이다.
즉, 설계도가 Class라면
객체 (= 인스터스)는 설계도의 구성요소다.
사람이 말로 표현 가능한 모든 것을 객체라 할 수 있다.
다시 Java로 돌아와서
Java가 객체지향프로그램 언어라는 의미는
위에서 설명한 객체를 이용해서 프로그램을 만드는 언어라는 뜻이다.
거기에 Class라는 설계도들이 있고
객체를 이용해 기능(# 함수, 메소드) 을 설계한 Class(설계도)가 많다는 의미는
프로그램의 성능으로 이어진다.
💡 클래스(Class)
객체지향 프로그램의 기본적인 사용자 정의 데이터형(user defined data type)
클래스는 다른 클래스 또는 외부 요소와 독립적으로 디자인된다.
클래스는 따로 정리해서 보도록 하자.
💡 메서드(Method)
클래스로부터 생성된 객체를 사용하는 방법
객체에 명령을 내리는 메시지
메서드는 한 객체의 서브루틴(subroutine) 형태로 객체의 속성을 조작(control)하는 데 사용
Ⅱ. 객체 지향 프로그래밍의 특징은 기본적으로 자료 추상화, 상속, 다형 개념, 동적 바인딩 등이 있다.
객체 지향 프로그래밍은
자료 추상화를 기초로 하여 # 설계도
상속, 다형 개념, 동적 바인딩이
시스템의 복잡성을 제어하기 위해 서로 맞물려 기능하는 것
Ⅲ. 자료 추상화
자료 추상화의 사전적 정의는 불필요한 정보는 숨기고
중요한 정보만을 표현함으로써 프로그램을 간단히 만드는 것이다.
즉, 자료 추상화란 우리가 흔히 쓰는 추상적이다라는 표현 처럼
중요한 특징들만 표현했다라고 생각하면 편하다.
이 개념을 자바로 접목시켜보면,
자바에서는 Class의 역할이 탄생하게 된 배경으로 이해하면 된다고 생각한다.
뒤의 Class에 관해 더 설명할 일이 분명히 생기기 때문에
그때 자세히 블로깅 하겠지만
Class의 목적은 추상적인것을 완전함으로 표현하는 과정에서
필요한 역할 #뼈대, 설계도을 하기에 객체프로그래밍의 특징에서 등장한다.
❗ 자료 추상화를 통해 정의된 자료형을 추상 자료형이라고 한다.
❗ 추상자료형은 자료형의 자료 표현과 자료형의 연산을 캡슐화한 것으로
접근 제어를 통해서 자료형의 정보를 은닉 할 수 있다.
객체 지향 프로그래밍에서 일반적으로 추상 자료형을 클래스,
추상 자료형의 인스턴스를 객체,
추상 자료형에서 정의된 연산을 메소드(함수),
메소드의 호출을 생성자라고 한다.
이러한 추상적 표현 # 설계도 에서 완성으로 가는 과정을 상속이라 생각한다.
Ⅳ. 상속 ⭐⭐⭐⭐⭐
상속은 새로운 클래스가 기존의 클래스의 자료 # 객체와 연산#기능, 메서드, 함수을 이용할 수 있게 하는 기능이다.
상속을 받는 새로운 클래스를 자식 클래스(= 파생 클래스 = 하위클래스 =부클래스)라고 한다
새로운 클래스가 상속하는 기존의 클래스를 부모 클래스(= 기반 클래스 = 상위 클래스)라고 한다.
상속을 통해서 기존의 클래스를 상속받은 하위 클래스를 이용해
프로그램의 요구에 맞추어 클래스를 수정할 수 있다
클래스 간의 종속 관계를 형성함으로써 객체를 조직화할 수 있다.
💡 다중 상속
다중 상속은 클래스가 2개 이상의 클래스로부터 상속받을 수 있게 하는 기능이다.
# 자바에는 다중 상속이 없다.
Ⅴ. 다형성
다형성이란 프로그래밍 언어의 자료형 체계의 성질을 나타낸다.
즉, 프로그램 언어의 각 요소들(상수, 변수, 식, 오브젝트, 함수, 메소드 등)이
다양한 자료형(type)에 속하는 것이 허가되는 성질을 뜻한다.
반댓말로 단형성이 있다.
💡단형성의 예시
//숫자를 문자열로 바꾸는 경우
string = StringFromNumber(number);
//날짜를 문자열로 바꾸는 경우
string = StringFromDate(date);
💡다형성의 예시
//숫자를 문자열로 바꾸는 경우
string = number.StringValue();
//날짜를 문자열로 바꾸는 경우
string = date.StringValue();
자바에서 자주 등장하는 다형성의 대표적인 예시 오버라이딩과 오버로딩에 대해 알아보자.
💡오버라이딩 : 같은 이름의 메소드가 여러 클래스에서 다른 기능을 하는 것
💡오버로딩 : 같은 이름의 메소드가 인자의 개수나 자료형에 따라서 다른 기능을 하는 것
class overloading {
static void display(int num1) { System.out.println(num1); }
static void display(int num1, int num2) { System.out.println(num1 * num2); }
static void display(int num1, double num2) { System.out.println(num1 + num2); }
}
만약 위에서 overloading 클래스에
변수가 뭐가 들어오느냐에 따라 프린트가 달라지는 클래스를 선언했다면,
public class 연산 오버로딩 {
public static void main(String[] args) {
overloading 실행변수 = new overloading();
실행변수.display(10);
실행변수.display(10, 20);
실행변수.display(10, 3.14);
실행변수.display(10, 'a');
}
}
public class 연산 오버로딩의 main함수에서
위의 overloading 클래스를 생성자(# new)로 불러오고(= 새로운 변수 실행변수가 overloading 클래스의 새로운 변수라고 지정)
아래에서 보이는 것처럼 main 함수에서 새롭게 지정된 변수 실행변수는display함수를 사용할 수 있다.
위의 예시는 오버로딩을 통한 코드 활용 예시이고
오버로딩이란
같은 이름의 함수에 변수를 어떻게 넣느냐에 따라(# 기능이 달라짐)
전부 사용 가능하다 라는 기능이다.
이러한 다형 개념을 통해서
우리는 프로그램 안의 객체 간의 관계를
조직적으로 나타낼 수 있다.
Ⅵ. 바인딩(Binding)?
바인딩의 단어 뜻은 묶는것.
사전적의미는 프로그램 구성 요소의 성격을 결정해 주는것으로
아래의 예를 보자.
int Star = 1;
위의 코드에 바인딩 개념을 넣어서 해석하면
아래와 같다.
int = 변수의 데이터 타입으로 바인딩
Star는 변수명으로 바인딩
1은 변수의 자료 값으로 바인딩
위와 같이 변수명, 변수의 데이터 타입, 변수의 자료 값에
정보값(information value)를 할당하는 각각의 과정을
바인딩이라고 한다.
함수를 예로 보면
함수를 호출한다는 것은
해당 함수가 저장되있는 주소를 연결하겠다.라는 의미이다.
즉, 바인딩은 객체의 메모리 주소를 연결해 주는것도 해당한다.
바인딩은 일어나는 시간에 따라 크게 두 가지로 분류된다.
정적 바인딩 (Static binding)
• 컴파일 시간에 일어나며, 실행 중 변하지 않고 유지된다.
💡 컴파일(Compile)
어떤 언어의 코드 전체를 다른 언어로 바꿔주는 과정
이를 자동으로 수행해주는 소프트웨어를 컴파일러(Compiler)라고 한다.
(그냥 쉽게 말하면 번역과정..)
• 정적 바인딩은 컴파일 시간에 대부분 변수들의 속성이나 호출될 함수의 주소를 확정해놓음
= 실행시간의 속도가 빠름.
• 같은 함수가 여러번 호출되면 또 다른 메모리를 할당받아 재귀 호출가능.
동적 바인딩 (Dynamic binding) ⭐⭐⭐
• 동적 바인딩은 실행 시간(Run Time) 중에 일어나거나, 실행 과정에서 변경될 수 있는 바인딩이다.
# 객체 지향 프로그래밍에 적합한 성질 ⭐⭐⭐⭐⭐
# Java는 인터프리터 언어. ⭐⭐⭐
• 컴파일 시간에 완료되어 변화하지 않는 정적 바인딩과 대비된다.
• 보통의 가상 함수 # 호출할 함수의 메모리 주소가 확정되지 않고 보류상태인 함수
는 동적 바인딩이다.
• 동적 바인딩은 프로그램의 한 개체나 기호를
실행 과정에 여러 속성이나 연산에 바인딩함으로써
다형 개념⭐⭐을 실현한다.
Ⅶ. 장점
소프트웨어 공학의 관점에서 볼 때 S/W의 질을 향상하기 위해
강한 응집력(Strong Cohesion)과
약한 결합력(Weak Coupling)을 지향해야 하는데,
객체지향 프로그래밍(OOP)의 경우
하나의 문제 해결을 위한 데이터를
클래스에 모아 놓은 데이터형을 사용함으로써
응집력을 강화하고,
클래스간에 독립적인 디자인을 함으로써
결합력을 약하게 한다.
'Hello Java' 카테고리의 다른 글
Java_클래스(Class) (0) | 2022.12.21 |
---|