풀스택 웹🌐 개발자 지망생 🧑🏽💻
➕ 인공지능 관심 🤖
Categories
-
┣
▶ COMPUTER_SCIENCE
📂: 7 -
┣
▶ WEB
📂: 3 -
┣
▶ ETC
📂: 3-
┃
┣
ETCS
📄: 10 -
┃
┣
SUBBRAIN 개발기
📄: 5 -
┃
┗
YOS 개발기
📄: 1
-
┃
┣
-
┗
▶ AI
📂: 9-
┣
AITOOLS
📄: 3 -
┣
CV
📄: 2 -
┣
DEEP_LEARNING
📄: 1 -
┣
DATA_VIS
📄: 2 -
┣
GRAPH
📄: 1 -
┣
LIGHTWEIGHT
📄: 1 -
┣
MATH
📄: 1 -
┣
NLP
📄: 3 -
┗
STRUCTURED_DATA
📄: 2
-
┣
JAVA 기본-객체 지향
객체 지향
객체지향 핵심 개념
객체지향(OOP, Object Oriented Programming) 개요
하드웨어는 각각 기능들이 독립적인 모듈이지만 소프트웨어는 그렇지 않아 재사용하기 어려워 비교적 소프트웨어의 발전 속도가 늦어서 이를 보완하기 위해 객체 지향 프로그래밍으로 발전
객체지향의 개념
과거 절차 지향 프로그래밍은 실행되는 순서가 위에서 아래로 순차적 진행되는 형태
이때는 프로그램 재사용 시 기존에 만든 코드를 복붙 하는 방법으로 사용했으며 함수를 이용하기도 함.
객체 지향의 발달로 객체간 공유되는 코드의 자유로운 이동 가능해짐, 높은 유지보수성 유지 가능
객체, 클래스, 인스턴스
객체
- 현실세계에 존재하는 유무형의 모든것, 정적인 요소 (변수), 동적인 요소(메소드)를 가짐
ex) 자동차의 경우, 변수는 색깔, 바퀴 갯수 등, 메소드는 운전한다. 문을 연다 같은 기능
클래스
- 현실 세계의 객체를 컴퓨터 메모리에 생성할 수 있는 템플릿
ex) 차가 가지고 있는 공통적인 요소들의 정리, 자동차 공장의 자동차 찍어내는 기계
인스턴스
- 컴퓨터 메모리에 존재하는 객체, 객체와 거의 동일하다고 봐도 됨
ex) 자동차 한대 한대를 따로 정보로 표현
객체지향 언어의 주요 개념
상속(Inheritance)
- 클래스와 속성과 메서드가 비슷한 여러 객체를 만드는 대신 기존의 클래스(부모클래스)를 이용해서 새로운 클래스(자식 클래스)를 작성할 수 있다.
- 자세한 것은 JAVA 기본-자바 상속 참조
상속의 특징
- 클래스의 변경과 정의를 기존의 클래스를 이용해 코드의 재사용성 증가
- 객체들 사이에 계층 구조를 이룰 수 있음. 부모 자식 관계
🧾️
자바 상속 관계 예시
public class Car {
// 멤버 변수 선언
String name;
int currentGear;//공개할 변수들
//메서드 선언
void changeGear(int gear){
System.out.println("-> 기어를 " + gear + "단으로 변경한다.");
currentGear = gear;
}
}//부모 클래스로써 Taxi 클래스에서 상속함
public class Taxi extends Car{ //extends 상속 관계 예약어
// 요금
int fare; // 새로 추가할 변수들
// 승객 유무
boolean passengerYn;
}// 자식 클래스, 부모 클래스의 변수와 메서드를 모두 물려받음
public class CarTest {
public static void main(String[] args){
// Car 객체(Instance) 생성
Taxi myTexi = new Taxi();
// 초기 값 설정
myTexi.name = "대현 운수 308";
myTexi.currentGear = 2;
myTexi.fare = 3400;
myTexi.passengerYn = true;
System.out.println(myTexi.getcurrentState());
}
}
- 상속의 관계과 일반화, 특별화 관계(is a~)에 있어야함
- 예를 들어 프린터의 자식으로 카메라 같이 관계없으면 안됨.
- 자바는 단일 상속만 지원함, 다중 상속 지원시 겹치는 요소 처리가 힘듦
-
다형성 (polymorphism)
- 하나의 인터페이스를 이용해 서로 다른 구현을 제공함
- 다형성은 메서드 오버로딩(overloading)과 메서드 오버라이딩(overriding)을 통해 지원됨
- 자세한 것은 JAVA 기본-메서드 매개변수와 오버로딩 참조
- 메서드 오버로딩(overloading)
- 한 클래스 안에 같은 이름의 메서드를 여러 개 정의하면서, 그 인자의 개수나 유형을 다르게 해 놓은 형태
- 메서드 오버라이딩(overriding)
- 상속 관계에 있는 하위 클래스가 상위 클래스가 가지고 있는 메서드를 재정의하는 것
- 재정의된 메서드가 선언된 형태는 상위 클래스에서 선언된 것과 같음
추상화(Abstraction)
- 구체적인 사실들을 일반화시켜 기술하는 것
- 현실세계에 존재하는 다양한 객체들의 공통된 특성을 모아 일반화해 놓은 것
- 클래스를 정의하는 데 중요한 역할을 함
- 자세한 내용은 JAVA 기본-추상 클래스와 객체 형변환 , JAVA 기본-인터페이스와 커스텀 패키지 참조
캡슐화(Encapsulation)
- 변수와 메서드를 하나의 추상화된 클래스로 묶어 독립적으로 동작하지 않게 함.
- 캡슐 속 객체는 데이터와 메서드를 포함하고 있어서, 따로 분리 불가.
- 객체가 제공하는 메서드를 통해 객체를 이용하고, 데이터가 실제로 어떻게 처리되는지는 알 필요 없음.
정보 은닉(Information hiding)
- 객체지향 언어에서는 캡슐화된 변수나 메서드를 선택적으로 공개하거나 숨길 수 있음
- 예시로
public
예약어로 정보를 공개하고,private
예약어로 숨길수 있다.
메시지(Message)
- 객체 간에 서로 통신하는 방법, 여러 객체는 동일한 프로세스를 가질 필요 없음
- 서로 메시지를 주고받는데 객체가 존재하는 위치는 제약이 되지 않음
_articles/computer_science/PL/JAVA/JAVA 기본/자바 문법/JAVA 기본-객체 지향.md