[목차]

 

1. 정보

2. 객체지향

    2-1. 개념

    2-2. C언어과 코드 차이

    2-3. C언어와 다른 점

    2-4. 접근제한자

    2-5. 상속, 오버라이딩

    2-6. 오버로딩

    2-7. 캡슐화, 정보은폐

3. 기출 및 예상문제 풀이

 

 

 

 

 

 

[정보]

 

C와 JAVA는 거의 동일(문법 등) 하다.

차이점으로는 JAVA의 경우 객체지향 프로그래밍 언어이고

C 언어는 절차적 프로그래밍 언어라는 점이다.

 

C의 문제점으로는 재 사용성이 떨어져 유지보수가 어렵다.

하지만 객체지향 언어로 소프트웨어를 개발하는 경우

재 사용성이 높아지고 유지보수가 수월해 생산성이 높아진다.

 

 

 


 

 

 

[객체 지향]

 

1. 개념

: 현실세계에 존재하는 실체 (Entity, 개체) 및 개념들을

'객체'라는 독립된 단위로 구성하고,

이 객체들이 메시지를 통해 상호작용함으로

전체 시스템이 운영되는 개념

 

: 객체 지향에서는 '클래스'와 '객체'라는 것의 개념과

둘의 차이점을 이해하는 것이 중요하다.

 

클래스 : 개념적 의미 (ex. 인간이라는 클래스(개념))

객체 : 구체적 의미 (ex. 동양인, 흑인, 백인 등 구체적인 내용)

> 객체는 속성(attribute, 데이터)과 메서드(연산자)로 이루어져 있다.

속성 : 객체가 가지고 있는 특성 (ex. 피부색이 다른 특성을 같은 코드를 재 사용해 수정 가능)

메서드 : 행위 (ex. 앉기, 책 들기, 페이지 넘기기, 읽기)

 

 

: 객체들끼리의 메시지를 통해 상호 작용한다는 뜻은

ex) 두 개의 서로 다른 클래스가 있다. (자동차, 인간)

자동차 class에는 자가용, 버스, 택시가 있고

인간 class에는 동양인, 흑인, 백인이 있다.

 

자동차 class의 객체에는

바퀴 4개, 엔진 1개, 휘발유/경유/LPG를 사용하는 속성과

전진, 후진이라는 메서드(행위)가 있고

 

인간 class의 객체에는

팔 다리 2개씩, 피부가 황색/검은색/흰색이라는 속성과

시동 걸기, 페달 밟기라는 메서드(행위)가 있다.

 

인간 class의 객체 동양인이라는 객체가 페달 밟기라는 메서드를 실행하면

실행된 메시지가 특정 객체로 전달이 되고 (ex. 자동차 class의 자가용 객체로)

해당되는 객체에 영향을 준다(ex. 전진)

곧 메시지를 통한 상호작용!

 

 

1-1. 클래스(class) 정의

- 하나 이상의 유사한 객체들을 묶어 공통된 특성을 표현한 데이터 추상화(모델링)를 의미

- 공통된 속성과 연산을 갖는 객체의 집합 (객체의 일반적인 타입)

- 인스턴스(instance) : 클래스에 속한 각각의 객체(객체는 class의 인스턴스다)

- 형식 : 접근제한자 class 클래스이름

package takudaddy;      
public class Car {       # > 이 부분이 class 정의
    int Engine;
    int Wheel;

     public void Drive() {
        ....
     }
}
 

 

1-2. 객체(Object) 정의 (20년 2회 실기 기출)

- 클래스의 인스턴스이며 객체들 간의 상호작용은 메시지를 통해 이루어짐

- 형식 : 클래스이름 변수이름=new 클래스이름();

# 위 클래스에서 기본 형태를 정의해 두면 
# 이를 객체화 시켜서 쉽게 이용이 가능

package takudaddy;       
public class Human {
    ...
    public static void main(String[] args) {
       Car Bus = new Car();      # > 이 부분이 객체 생성 , 위 Car 클래스의 객체변수 이름을 지정
       Car Taxi = new Car();     # > 이 부분이 객체 생성 , 위 Car 클래스의 객체변수 이름을 지정
    
       Bus.Wheel = 4;     # > 속성명 뒤에는 괄호가 없다 (변수개념 - 데이터)
       Bus.Drive();    # > 메소드명 뒤에는 괄호가 있다 (함수개념 때문 - 연산자)
     }
}
 

데이터 : 객체가 가지고 있는 상태(속성, attribute, 변수, 자료구조)

연산자 : 객체의 데이터를 처리하는 행위(메서드, method, 동작, operation, 함수, 프러시저)

 

 

 

 

2. C언어와 코드 차이

#include <stdio.h> public class takudaddy {}

main() {} vs public static void main(String[] args) {}

printf("%d",sum); vs System.out.print(sum);

 

Java의 경우 다음 줄 출력 시 System.out.println(); 씀

- println 지정 안 해주면 한 줄에서 연달아 출력됨

 

 

 

2-1 공단 샘플 문제 (20년 이전)

자바에서는 객체를 하나 선언하면(위 경우 a) 자동으로 여러 속성과 메서드를 이용할 수 있다.

 

a.length = 객체.속성

int i = a.length -1; 의 뜻은

a라는 객체의 배열의 길이 (6)에서 1을 뺀 수를 i에 저장한다는 뜻

 

 

* 최댓값 구하기

int[] a={5,3,8,6,1};
int max=0;
for (int i=0; i<5; i++){
   if(a[i] > max)
      max = a[i];
}
System.out.print(max); 
 

 

 

3. C 언어와 다른 점

3-1) 배열 변수(객체 선언)

C                         JAVA

---------------------------------------

int a[10]; int          a[] = new int[10];

                          int a[][] = new int[5][5];

* 둘 다 초기화 시 배열 크기 지정 생략 가능

int X[]={0,10,10,10,1,0,1};

 

 

3-2) C언어 scanf("%d", &k); -> 사용자에게 입력받은 데이터가 k에 저장된다)

import java.util.Scanner -> 데이터를 입력 받아 사용할 수 있도록 scanner 클래스 호출

public class takudaddy {

public static void main(String[] args){

Scanner scanf=new Scanner(System.in); -> scanf는 입력(System.in)을 받을 수 있도록 선언

int k;

k = scanf.nextlnt(); -> 정수형으로 입력 받는 메서드

scanf.close(); -> scan

import java.util.Scanner -> 데이터를 입력 받아 사용할 수 있도록 scanner 클래스 호출
public class takudaddy {
    public static void main(String[] args){
        Scanner scanf=new Scanner(System.in); -> scanf는 입력(System.in)을 받을 수 있도록 선언
          ^       ^
           |       |
       #클래스명 #객체 변수명

          int k;
          k = scanf.nextInt(); -> 정수형으로 입력 받는 메서드
        scanf.close(); -> scanf 객체 변수를 메모리에서 해제
 

 

3-3) C언어 while(1)

Java에서는 while(True)

 

 

3-4) 개선된 for 문

C(초기값, 최종값, 증가치) JAVA(초기값, 최종값, 증가치 또는 (: 배열))

for (int i=1; i=5; i++) for(int i =1; i<=5; i++) 또는 (int i : a)

 

 

3-5) 문자열

# C
char str[10] = "takudaddy";
printf("입력 값은 : %s", str);

# JAVA
String str = "takudaddy";     #> String은 문자열 클래스 str은 문자열의 특성을 이어받은 객체
int c = str.length();          # 그 객체에 takudaddy를 저장 
System.out.printf("입력 값은: %s \n", str);
System.out.printf("길이는 : %d", c);
 

자바는 클래스를 선언 후 클래스에서 객체를 만들어 출력을 해야한다는게 핵심.

 

 

 

4. 접근 제한자 (20년 2회, 20년 4회 필기 기출)

형식 : [접근제한자] class 클래스명 {

        맴버 변수

        메서드

         }

 

4-1) public

: 모든 접근을 허용 (까페 등에서 공개된 글)

 

4-2) protected

: 동일 패키지 내의 클래스와 다른 패키지의 상속 관계(하위 클래스)에 있는

클래스에서도 접근가능(상속 관계가 없는 다른 클래스는 차단)

 

4-3) default

: 아무런 접근 제한자를 명시하지 않으면 default 값이 되며,

자신을 포함하는 패키지에서만 접근 가능

 

4-4) private

: 자신을 포함한 클래스에서만 접근 가능

(외부에 있는 클래스의 접근 차단)

 

* 상속 (Inheritance)

: 상위(부모) 클래스의 메서드와 변수들을 물려받아 그대로 사용 가능하게 해주는 것

 

* 패키지 (Package)

: 비슷한 성격의 자바 클래스들을 모아 넣은 자바의 디렉터리 (폴더와 동일한 개념)

 

* 클래스 제한

: public, default(=package)

 

* 변수/메서드 제한

: public, protected, default, private

 

 

 

 

5. 상속, 오버라이딩

* A extends B (하위 extends 상위)

: A 클래스가 B 클래스를 상속 받는다는 뜻

 

* 오버라이딩(재 정의) 수행 순서(우선순위)

하위에서 상위 클래스를 오버라이딩 해 동일한 메서드를 사용하는데

메인에서 특정 메서드를 호출하는 경우(ex. a.paint();),

오버라이딩 된 하위 클래스 paint(){}가 먼저 호출되고

super를 붙여 메서드를 호출하는 경우(super.draw();)는 상위 클래스의 메서드,

아무것도 없이 메서드를 입력하는 경우(draw();) 하위 클래스의 메서드가 우선순위

 

위 코드의 경우 첫 번째 출력은 하위 클래스의

System.out.println("Sub Object");

다음으로

해당 클래스를 호출한 곳으로 다시 돌아가

System.out.println("Super Object");

출력.

 

 

 

 

6. 오버로딩

 

 

 

7. 캡슐화, 정보은폐

 

* 영문으로 모두 암기해야 함

 

 

 


 

 

 

[기출 및 예상문제 풀이]

 

 

 

 

 

10) String 클래스 내에 length라는 메소드를 사용

 

11) A 클래스의 속성을 물려받는 a라는 객체 변수를 생성 (A클래스의 속성 및 메소드 사용 가능)

메인에서 A 클래스의 처음, 세번째 메서드만 호출한 상황이니 두 번째는 실행 안됨

 

 

 

 

 

 

 

 

출처 : 유튜브 기사퍼스트 권우석

https://www.youtube.com/watch?v=J6vMOw07y4I&list=PLz95GL3y9Hv1pC1yOWBV1yqHxi4jEOKez&index=19

 

 

 

 

 

 

728x90

+ Recent posts