컴파일 ( Compiling ) :
프로그래밍 언어로 작성한 "소스코드"를 컴퓨터가 알아 들을 수 있도록 번역해주는 일
-일반적으로 c++, rust, java 등의 고급 언어로 작성된 코드를 실행가능한(runnable) 코드로 변환
객체 지향 프로그래밍 (Object-Oriented Programming)
: 프로그래밍에 필요한 데이터 추상화 > 상태와 행위를 가진 *객체로 생성 > 객체들 간 상호작용으로 로직 구성
* 객체 : 변수 (값을 저장) 와 메소드 (작업수행) 를 서로 연결한 것들끼리 묶은 것
[ 데이터 또는 식별자에 의해 참조되는 공간 ]
* 객체 지향 프로그래밍의 특징 4가지
1. 추상화
-
객체에서 공통된 속성과 행위 추출
공통된 속성, 행위를 찾아 타입 정의
불필요한 정보는 숨기고, 중요한 정보만을 표현 (단순화)
2. 캡슐화
-
변수와 함수를 하나로 묶는 것
낮은 결합도가 유지되도록 설계 - 변수와 메소드를 클래스로 분류 > 재활용이 원활
+) 캡슐화를 통한 정보은닉 활용 또한 가능 (접근제어자 활용)
*접근제어자 : 추후 공부
3.상속
-
새로운 클래스가 기존 클래스 데이터와 연산 이용 가능.
장점 : 재사용으로 인한 코드 감소
범용적(여러 용도로) 사용 가능
자료와 메소드 추가 및 사용이 자유로움
단점 : 상위 클래스 변경이 어려움
불필요한 클래스 증가의 가능성
상속 사용시의 오류 발생 가능성
4 다형성
-
하나의 변수명,상수명이 상황에 따라 다르게 해석 가능
(한 요소에 여러 개념을 넣는 것)
- > 하나의 클래스 내부에 여러 행위를 정의하거나
상위 클래스를 하위 클래스에서 재정의 해서 사용 가능하기 때문
*
// 오버라이딩 : 상위 클래스의 메소드를 하위 클래스가 재정의 해서 사용
// 오버로딩 : 같은 이름의 메소드가 *인자의 개수나 자료형에 따라 다른 기능을 하는것
객체 지향의 장단점
-장점 :
클래스 단위로 모듈화* //업무 분담이 편리, 대규모 개발에 적합
(*모듈화 : 소프트웨어의 성능을 향상 / 시스템 디버깅, 시험, 통합 및 수정을 용이하도록 하는 소프트웨어 설계 기법)
클래스 단위로 수정 가능 //유지 보수에 편리
클래스 재사용, 상속을 통한 확장으로 코드 재사용이 용이함
-단점 :
처리 속도가 느림(상대적 관점)
객체수에 따라 용량이 커짐
설계시의 많은 시간과 노력 필요
[ 객체지향이라 해서 절차가 없는 것 아니다 /
절차적이라 해서 객체를 다루지 않는 것이 아니다 ]
SOLID. 객체 지향 설계 원칙 (객체 지향적 설계를 위한 다섯가지 원칙)
1. 단일 책임
:하나의 클래스는 하나의 책임만 가져야 한다
// 아닐 시, 책임의 변경에 의해 다른 코드에 영향이 갈 수 있는 가능성 보유
2 개방-폐쇄
: 소프트웨어 요소의 확장에는 열려있고, 변경에는 닫혀있어야 한다
=기능을 변경, 확장 가능하면서 기능을 사용하는 코드는 수정하지 않는다
3 리스코프 치환
: 프로그램의 정확성을 깨뜨리지 않으면서 하위타입의 인스턴스*로 변경 가능해야한다
상위 타입 객체를 하위타입 객체로 치환해도,
상위타입을 사용하는 프로그램은 정상적으로 동작해야한다
* 인스턴스 : 일반적으로 실행 중인 임의의 프로세스, 클래스의 현재 생성된 오브젝트를 가리킨다.
4 인터페이스 분리
: 범용 하나보다는 클라이언트를 위한 여러개의 인터페이스로 구성
인터페이스를 사용하는 클라이언트를 기준으로 분리할 것
5 의존관계 역전
: 추상화 / 구체화에 의존 X
고수준 모듈은 저수준 모듈 구현에 의존해선 안된다
저수준 모듈은 고수준 모듈에서 정의한 추상 타입에 의존
'개념,기능 정리' 카테고리의 다른 글
논리연산자, 병합연산자 +@ (0) | 2024.02.28 |
---|---|
[JS]연산자 / 형 반환 (0) | 2024.02.23 |
기능 추가 제공 사이트 (disqus, tawk.to) (0) | 2024.02.20 |
[HTML] <a></a>, <iframe></iframe> (1) | 2024.02.20 |
[HTML+CSS+JS] 3D-Cube banner(preserve-3d) (1) | 2024.02.14 |