- 객체지향 프로그래밍 언어
- 구조적(절차적) 방식의 문제점을 극복하고 인간이 사고하는 방식대로
- 객체(object)라는 실 세계에 존재하거나 또는 개념적인 그 어떤 것을 표현한 것
- 기능과 자료가 통합된 객체 단위로 프로그래밍
- 객체 : 클래스의 인스턴스
- 클래스 : 객체를 생성하는 틀
- 메세지 : 객체간 통신을 의미
- 객체의 구성요소
- 개체(Entity) : 현실 세계에 보이는 본질
- 속성(Attribute) : 자료 저장소 역할을 하며, 절차 지향 프로그래밍 변수와 대응됨
- 메소드(Method) : 호출 단위 의미, 절차 지향 프로그램의 함수와 대응됨
- 대표적 객체지향 언어
- Java : (과거)썬 마이크로시스템즈에서 개발
- C# : 마이크로소프트에서 개발, 닷넷 프레임워크의 한 부분
- 델파이
- 스위프트 : Objective-C와 공존할 목적
- 객체지향 프로그램의 특징
-> 캡슐화, 추상화, 다형성, 정보은닉, 상속
- 캡슐화와 정보은닉
캡슐화는 기능과 데이터를 하나로 묶어 객체로 표현하는 것
-> 클래스 내부의 동작으로 모르더라도 클래스가 제공하는 메소드를 사용해 클래스의 기능 사용
-> 캡슐화를 통해 정보은닉이 가능해짐
- 정보은닉의 범위
- private : 동일 클래스에서만 접근 가능
- package : 동일 클래스, 동일 패키지
- protected : 동일 클래스, 동일 패키지, 상속 관계
- public : 모든 위치에서 젖ㅂ근 가능
- 추상화
실체에서 공통되는 속성이나 관심있는 부분만 추출하여 모델링한 개념
- 상속
상위 클래스의 속성, 메소드를 상속하여 새로운 클래스를 생성하는 기법
-> 추상화된 클래스를 구체화시키는 방법
-> C++은 다중상속 지원, Java에서는 클래스의 다중상속은 지원하지 않지만 Interface의 다중구현 가능
- 다형성
동일한 이름의 오퍼레이션(메소드)이 각 클래스마다 다른 사양으로 정의될 수 있는 것
-> 하나의 클래스 안에서 사용되는 오버로딩과 상속관계의 클래스에서 사용되는 오버라이딩이 대표적
* 오버로딩 : 메소드 중복정의 -> 매개변수 타입에 따른 구분
* 오버라이딩 : 메소드 재정의 -> 클래스에 따른 구분
-> 오버라이딩은 객체지향 설계의 OCP(Open Close Principle), LSP(Liskov Substitution Principle), DIP(Dependency Inversion Principle)를 구현하기 위한 필수 요소
-> 다형성의 핵심, 다양한 디자인 패턴에서 사용됨
- 스크립트 언어
소스코드를 컴파일하지 않고도 실행 할 수 있는 프로그래밍 언어
-> 주로 다른 응용 프로그램에 삽입되어 인터프리터를 통해 해석되고 동작
-> 인터프리터가 있다면 어떤 운영 체제 위에서도 동일하게 동작
- 대표적인 스크립트 언어
- JavaScript : 미국 넷스케이프에서 개발 -> Java와 기능상 아무런 관련이 없다.
- JSP : Java Server Pages의 약자, 웹 페이지 동적 생성
- PHP : 서버 측 스크립트 프로그래밍 언어
- ASP : Active Server Pages의 약자, MS윈도우 서버에서 운영되는 서버 측 스크립트 언어
- 펄(Perl) Practical Extraction and Report Language의 약자 -> 텍스트 처리에 주안점을 두고 개발된 스크립트 언어로 CGI 개발에 사용
- Python : 플랫폼 독집적, 인터프리터식, 객체지향적, 동적타이핑의 대화형 언어
- 대표적인 스크립트 언어 Python
최근 인공지능 라이브러리 텐서플로우의 등장과 함께 많은 관심을 받고 있음
-> 변수 선언시 자료형은 자동으로 결정되고, 블럭을 표시하는 괄호 대신 Indent(들여쓰기)를 이용
- Python 기본 문법
- 변수와 자료형
val3 = "abc" //문자열
val4 = [1,2,3] //리스트(배열)
val5 = (1,2,3) //튜플
val6 = {"a":1, "b":2} //딕셔너리
-> 튜플이란 자료형은 읽기 전용으로, 함수 리턴시 여러값을 전달하는데 유용
- 조건문 : if - elif - else
- 논리연산자 : AND, OR, NOT을 기호가 아닌 문자 그대로 사용
- 반복문
-> do - while 문은 없다.
-> 배열을 insertion 하는 방법은 for - in 구문 사용
array = ['가', '나', '다']
for s in array:
print(s)
-> 인덱스를 사용하고자 할 때에는 range함수를 사용하여 범위 지정
for idx in range(0,3):
print(array[idx])
- 함수
def sum(a, b): //선언
return a+b
-> 메소드 오버로딩은 지원하지 않음
- 클래스
class Human:
def _init_(self, name, age): //생성자
// 멤버변수 따로 선언없이 self 키워드로 처리
self.name = name
self.age = age
def getInfo(self): //멤버변수, 파라미터가 없더라도 self키워드 필요
return slef.name, self.age
man = Human("dk", "18")
info = man.getInfo()
print(info[0]) // 리턴값(튜플)의 첫번째 값 접근
print(info[1]) // 두번째 값 접근
- 상속
class Human:
class Soldier(Human): // Human 상속
- Python의 오버라이딩
class Shape:
def draw(self):
pass
class Rect(Shape):
def draw(self):
pass("Draw Rect")
class Circle(Shape):
def draw(self):
pass("Draw Circle")
'전공 > 정보처리기사 실기' 카테고리의 다른 글
정보처리기사 실기 - 10. 응용 SW 기초 기술 활용(1) /운영체제 기초 활용하기 -1 (0) | 2021.05.15 |
---|---|
정보처리기사 실기 - 9. 프로그래밍 언어 활용(3) /선언형언어/라이브러리 (0) | 2021.05.11 |
정보처리기사 실기 - 9. 프로그래밍 언어 활용(1) /기본문법/변수명명법/절차적언어 (0) | 2021.05.04 |
정보처리기사 실기 - 8. 소프트웨어 개발 보안 구축(3) /보안기능/에러처리/모바일앱/보안테스트 (0) | 2021.05.03 |
정보처리기사 실기 - 8. 소프트웨어 개발 보안 구축(2) /입력데이터검증 (0) | 2021.05.03 |