728x90
반응형

 

안녕하세요. 별거 없지만 제가 했던 공부법을 소개해드리겠습니다!

 

필기를 위해 그 많은것들을 전체적으로 공부 할 시간은 없고.... 이번 시험만 붙을 목적으로 공부하고 싶은데..!

 

좋은 방법 없을까 하다가 도전해본 방법인데 합격했습니다.

 

 

 

 

 

두번이나 떨어졌습니다... 엄청 방심했어요.

 

간단하긴 하지만 제가 어떻게 독학해서 2주만에 필기 1급을 따냈는지 알려드리겠습니다!

 

 

 

 

 

 

 

 

 

공부 방법

 

 

2016~2020년도 기출문제를 전부 답만 외우기

 

진짜 답만 외우는 겁니다..  답만... 할 수 있습니다!

 

3회독 하시면 문제 안읽고 1~4번 보기만 봐도 답이 눈에 답이 딱 보입니다.

 

 

 

 

문제 푸는 곳

 

http://www.gisafirst.com/board/n1/view.php?offset=0&tq=1401179750&reqCategory=&idx=69&word=%ED%95%84%EA%B8%B0&s_type=&s_content=&s_terms=

문제는 여기 '기사퍼스트'에서 뽑아서 외웠습니다.

그런데 문제를 다시 풀려고 프린트를 또 하기에는 종이가 너무 아까웠습니다.

 

 

https://www.gunsys.com/q/index.php

그래서 저는 여기에서 복습용으로 문제를 풀었습니다.

 

 

 

 

시험 3번 보면서 느낀점은.. 기출문제와 상설시험 문제의 답이 똑같이 나오는 것 입니다.

 

보기의 순서는 바뀔 수 있습니다!

 

 

 

 

모두 좋은 결과 있길 바랍니다!

728x90
반응형
728x90
반응형

객체 : 개체, 속성과 메소드로 구성된 클래스의 인스턴스를 의미한다

속성(애트리뷰트) : 자료 구조, 변수, 데이터, 성질, 분류, 식별, 수량, 상태를 의미한다

메소드 : 행위, 기능, 함수, 프로시저, 연산 등을 의미한다 (메소드는 동사형, 객체는 명사형이다)

객체지향 기술은 대형 프로그램 개발에 적당하고 객체를 이용하기 때문에 신속하게 개발을 할 수 있지만, 객체 자체의 설계가 어렵고 객체의 규모가 크기 때문에 실행 속도가 느리다.

클래스

- 데이터를 추상화하는 단위이다

- 객체의 타입을 정의하고 객체를 생성하는 틀을 의미한다

- 문제 해결을 위한 같은 종류의 집단에 속하는 속성과 행위를 정의한 것이다

인스턴스

- 실행 중인 임의의 프로세서, 클래스의 현재 생성된 객체를 가리킨다

- 클래스로 정의된 객체의 복사본이라고 할 수 있다

메시지 : 객체 사이의 인터페이스 형식. 메시지를 주고 받으면서 객체 간의 상호작용이 이루어 짐

캡슐화

- 구조적 설계에서 모듈화와 같은 의미로 객체를 정의할 때 연관된 속성과 방법을 한 테두리로 묶는 것을 의미

- 재사용이 용이하고 중복성을 최소화한다

- 정보 은폐로 내부 자료의 일관성이 유지된다

-가독성이 좋아 유지보수가 용이하고 변경이 발생할 때 오류의 파급 효과가 적다

추상화

- 불필요한 것은 제외하고, 공통적으로 사용 가능한 큰 틀을 구상한다

- 변수에 대한 데이터 타입을 정의하고, 상세한 부분은 다루지 않는 추상적인 형태로 구조화한다

- 복잡한 문제의 본질을 이해하기 위해 세부 사항은 배제하고 중요한 부분을 중심으로 간략화하는 기법

ex) 소프트웨어공학 교수, 정보통신공학 교수, 정보보안 교수 등을 추상화하면 교수가 된다.

반대로 교수를 객체화하면 저런 교수들이 되는 것이다.

상속과 구체화

- 상속은 상위 클래스의 속성과 메소드를 하위 클래스가 내려받아 사용하는 것이다

- 구체화는 하위 수준(자식) 그룹이 상위 수준(부모) 그룹의 추상적인 부분을 구체화시키는 것을 의미한다

- 다중 상속은 하나의 객체가 여러 개의 상위 클래스로부터 속성과 메소드를 상속받는 것을 의미한다

다형성

- 상속받은 여러 개의 하위 객체들이 다른 형태의 특성을 갖는 객체로 이용될 수 있는 성질

 

 

 

 

 

 

객체지향 분석 방법론의 종류

 

객체지향 분석의 순서

객체 모델링 -> 동적 모델링 -> 기능 모델링

Rambaugh(람바우) Method

- 객체지향 분석을 3개의 모형인 객체 모형, 동적 모형, 기능 모형으로 분리하여 접근하는 방법

- 가장 대표적인 방법론

E-R 다이어그램 : 데이터 구조들과 그들 간의 관계들을 표현하고 객체 모형을 만드는 방법론

Booch Method : 미시적 개발 프로세스, 거시적 개발 프로세스로 접근하는 방법

Coad와 Yourdon Method : E-R 다이어그램을 사용함

Jacobson Method : 사용자가 제품 또는 시스템과 어떻게 상호 작용하는지를 서술한 시나리오로 접근

Wirfs - Brocks Method : 분석과 설계 프로세스 간에 뚜렷한 구분이 없음

 

 

 

 

 

 객체지향 설계

 

객체 모델, 동적 모델, 기능 모델을 설계하고 시스템(인터페이스)를 결정한다

단일 책임의 원칙(SRP) : 객체는 하나의 책임만 맡아 처리할 수 있어야 한다 (낮은 결합도, 높은 응집성)

개방 폐쇄 원칙 (OCP) : 소프트웨어 개체는 확장에는 열고, 수정 시에는 닫혀있게 해야한다

리스코프 치환의 법칙(LSP) : 서브타입(하위 클래스)은 어디에서나 자신의 기반 타입(상위 클래스)로 교체할 수 있어야 한다

인터페이스 분리의 원칙(ISP) : 클라이언트는 자신이 사용하지 않는 메소드와 의존 관계를 맺거나 영향을 받아서는 안된다

의존성 뒤집기의 원칙 (DIP) : 추상화 클래스에 의존하게 되므로, 구체적인 클래스에 의존하지 않도록 해야한다

 

 

 

 

 

 자바 언어

 

객체 생성 코드

- 클래스명 객체 변수명 = new 클래스명(); == mathCircle m = new mathCircle();

상속 코드 (클래스 이름 쓰는곳에 적는것)

- class 하위클래스명 extends 상위클래스명{ } == class Mid_Student extends Ele_Student{ }

- 자바는 기본적으로 다중 상속을 할 수 없는데, 이를 가능하게 하는 것이 interface, implements 이다

- interface 상위 클래스명{ }

- class 하위 클래스명 implements 상위 클래스명{ } 으로 사용하면 된다

접근 지정자

- private : 외부 객체에서 사용할 수 없고, 자신의 클래스에서만 사용 가능하다

- default(생략 시) : 하위 클래스나 다른 패키지에서는 사용할 수 없고, 자신의 클래스와 같은 패키지에서 사용할 수 있다

- protected : 다른 패키지에서 사용할 수 없고, 자신의 클래스와 같은 패키지, 하위 클래스에서 사용할 수 있다

- public : 모든 객체에서 사용할 수 있으며, 가능한 사용하지 않는 것을 원칙으로 한다

오버로딩 : 하나의 클래스 안에서 동일한 이름을 가진 메소드를 사용하는 기술이다 (같은 이름이여도 입력 인자값이 다르거나 메소드의 형이 다름)

오버라이딩 : 추상 클래스에서 동일한 메소드명과 인수를 정의해주면, 메소드 안의 프로그램은 상속받은 클래스에서 다양하고 독립적으로 프로그래밍을 할 수 있도록 한다는 개념

728x90
반응형
728x90
반응형

알고리즘의 5가지 특성

 

- 입력 : 입력은 0개 이상 존재한다

- 출력 : 출력은 1개 이상의 결과가 있어야 한다

- 명확성 : 명령어들은 명확해야한다

- 유한성 : 알고리즘의 명령어들은 유한 번의 수행 후 종료되어야 한다

- 유효성 : 모든 명령들은 명백하고 실행 가능한 연산들이어야 한다

 

 

코드 품질 향상 기법

- 테스트 : 말 그대로 테스트. 코드를 돌려보는 것 이겠죠.

- 코드 인스펙션 : 코드에 존재하는 결함을 눈으로 발견하는 검사

- 증명 : 가장 이상적인 방법으로 소프트웨어 품질이 아주 중요한 경우에 주로 활용

- 동적 분석 : 프로그램을 실행시키고 분석하는 도구. (실행과정에서 비효율적인 코드를 분석함)

- 정적 분석 : 프로그램을 실행시키지 않고 분석하는 도구. (데드코드가 없는지, 선언이 되지 않고 사용한 변수가 없는지 등을 확인함)

* 4강에서 정적,동적이 나온다면 대부분 프로그램 실행의 유무입니다 *

 

 

 

C언어에 대하여

 

- C언어 변수 선언의 예약어

 

-변환 문자와 옵션

- : 좌측에 맞춰 출력한다

+ : 숫자 앞에 부호를 붙인다

0 : 숫자 앞 공백을 모두 0으로 채운다

ex) 정수일 경우

%7d : 7자리 수를 확보, 우측에 맞춰 출력

%-7d : 7자리 수를 확보, 좌측에 맞춰 출력

%3d : 5글자를 이걸로 출력할 경우! => 자리가 부족해도 출력

 

실수일 경우

%7.2f : 소수점 이하 두자리 사용, 나머지 반올림

%.1f : 자릿수를 생략하면 상수 값에 자리를 맞춰 출력

문자일 경우

%7.2s : 2문자를 끊어서 우측에 맞춰 출력

* 실수일 경우와 문자일 경우도, 정수일 경우의 규칙을 이행한다 *

- 연산자 정리 (헷갈리는거 위주)

a<<n : 변수 a를 n비트 만큼 좌 시프트한다 (숫자가 커지는 쪽)

a>>n : 변수 a를 n비트 만큼 우 시프트한다 (숫자가 작아지는 쪽)

++a : a변수를 1 증가시키고 이 문장이 있는 줄부터 증가됨이 적용

a++ : 일단 이 문장을 a값의 변화없이 넘어가고, 다음 문장부터 a의 값이 1 증가한 상태로 적용

- 변수 선언

sub(){

static int a=0 //그대로 유지, 실행 시에는 수행하지 않음

outo int b=0 //매번 새롭게 실행

a++; b++;

}

여기서 sub함수를 반복해서 실행하면 a는 처음에만 0으로 초기화되고 이후에는 초기화되지 않아서 계속해서 수가 증가한다. 반면에 b는 함수를 실행할때마다 0으로 초기화 되면서 0,1,0,1의 값을 반복하게 된다.

728x90
반응형
728x90
반응형

저급언어

- 기계 중심의 언어로 배우기 어렵다

- 기계가 이해할 수 있도록 만들어진 언어이다

- 호환성이 떨어진다

- 기계어, 어셈블리어 등의 언어는 저급 언어이다

고급언어

- 사람 중심의 언어로, 배우기 쉽다

- 개발자가 원시 프로그램을 작성할 때 쉽게 이해할 수 있도록 작성된 언어이다

- 호환성이 좋다

- C,C++,Java,COBAL,FORTRAN 등이 해당된다

- 기계어로 번역이 필요하다

기계어

- 2진수 0과 1만 사용하여 명령어와 데이터를 나타낸다

- 언어 번역 과정이 필요없다

- 호환성이 없다

- 유지보수가 어렵다

원시 프로그램 : 기계어로 번역되기 전 프로그래머에 의해서 작성된 프로그램 파일

목적 프로그램 : 기계어로 번역된 프로그램 파일 (0과1로 구성)

 

 

 

 

언어 번역 프로그램

 

어셈블러 : 저급언어를 기계어로 변환시킴 (어셈블리어)

컴파일러 : 고급언어를 기계어로 변환시킴 (C, C++, PASCAL, FORTRAN)

*기계어 = 목적 프로그램*

- 빠르다, 번역시 장소를 확보

인터프리터 : 원시 프로그램을 입력으로 받아 기계어로 변환하지 않고 직접 실행

(BASIC, PROLOG, LISP, PYTHON)

- 반복문 사용시 컴파일러에 비해 불리함, 실행시 장소를 확보

- 대화식 프로그램일 경우 컴파일러에 비해 유리함

=> 컴파일러와 인터프리터의 가장 큰 차이점은 목적 프로그램의 생성 유무

프리프로세서 : 고급 언어를 또 다른 고급 언어로 번역하는 고급 언어 번역기

크로스 컴파일러 : 컴퓨터 기종이 다른 경우에 사용되는 컴파일러

매크로 프로세서 : 어셈블리어를 사용하기 쉽도록 명령어들을 매크로(문자)로 치환하여 확장시킴

 

 

 

프로그램 수행 순서

 

원시 프로그램 -> 컴파일러 -> 목적 프로그램 -> 링커 -> 로더 -> 실행

링커 : 여러개의 목적 파일을 하나의 프로그램으로 연결한다

로더 : 프로그램이 실행될 수 있는 환경을 설정하고 프로그램을 주기억 장치에 적재한다

[절대로더 : 할당(프로그래머) -> 연결(프로그래머) -> 재배치(어셈블러) -> 적재(로더)]

실행 : CPU에 의해서 프로그램이 실행된다

컴파일러 단계

어휘분석 -> 구문분석 -> 의미분석 -> 중간 코드 생성 -> 코드 최적화 -> 코드 생성

 

 

 

 

 

 

 

 

자료 객체

 

예약어 : 용도가 정해져있는 단어 (for, while, if 등)

변수 : 기억 장치의 한 장소를 추상화한 것으로 프로그램이 동작하는 동안 값이 수시로 변할 수 있음

+ 어떤 값을 주기억 장치에 기억하기 위해 사용하는 공간

상수 : 수명 시간 동안 고정된 하나의 값과 이름을 가진 자료로써, 프로그램이 동작하는 동안 값이 절대로 바뀌지 않는 것을 의미함

식별자 : 프로그램의 구성 요소를 구별하기 위한 기준, 변수명이 식별자에 속함

선언 : 변수 이름을 나열하고 속성을 부여하는 것 (상수 값에 의해 속성이 부여되기도 함)

할당 : 변수에 메모리 공간을 바인딩하는 작업

배열

- 같은 크기와 타입의 자료를 연속적인 기억 장치에 저장하여 처리하는 구조

- 고정 크기의 메모리 공간을 사용

- 연속적인 기억장치를 사용 (논리적, 물리적 순서 동일)

- 중간에 삽입, 삭제가 어려움

- C언어의 선언 : int A[2][5];

- Java의 선언 : int[][]A = new int[2][5];

포인터

- 변수명에는 실제 기억 장소의 위치인 절대 번지가 존재하는데, 이를 주소 상수라고 하거나 포인터 상수라고 함

- 변수 a의 포인터 상수는 &a로 사용하면 된다

- 커다란 배열에 원소를 효율적으로 저장하고자 할 때 이용함

바인딩 : 변수의 명칭, 메모리 주소, 데이터형 또는 실제 값을 연결하는 것을 의미함 (변수들이 갖는 속성 결정)

=> 정적 바인딩은 프로그램 실행 시간 전, 동적 바인딩은 프로그램 실행 시작 후의 속성을 연결하는 것

728x90
반응형

+ Recent posts