C++, Java, Python 언어의 특징(2)

김우진·2021년 1월 4일
1

목차

  1. C++ 언어의 특징
  2. Java 언어의 특징
  3. Python 언어의 특징

2. Java 언어의 특징

1) 이식성이 높음

  • 운영체제와 상관없이 JVM을 통해 사용 가능
  • 운영체제 종류에 따라 자료형의 크기 등이 달라지는 C언어와 다르게 Java는 항상 동일

2) Object Oriented Programming

  • 객체들을 결합하여 프로그래밍

3) 메모리를 자동적으로 관리

  • Java에 존재하는 GC(Garbage Collector)에 의해 사용되지 않는 객체는 자동적으로 메모리에서 제거됨

4) 편리한 Multi-Thread

  • Java API를 사용하여 일관적인 Thread 생성 및 관리가 가능

5) 동적 로딩

  • 객체가 필요한 시점에 동적으로 객체를 생성할 수 있음
  • 유지 보수 시 특정 객체만 수정 및 교체하여 사용이 가능

6) Call by value

2-1. OOP 특징

1) Abstraction

  • 필요한 속성이나 행동을 추출하는 작업
  • 자전거를 '탄다', 차를 '탄다' 등 공통적인 특징을 파악해서 이를 하나의 개념으로 다루는 수단

2) Encapsulation

  • 멤버 변수에 직접적인 접근이 아닌 멤버 함수를 사용해서 접근하도록 함
  • private을 사용하여 직접 접근할 수 없도록 설정

3) Generalization

  • 상속 관계
  • 자식 클래스를 외부로부터 은닉하는 encapsulation의 일종
  • 선언 방법
    ➔ <접근자> class <클래스명> extends <상속받을 클래스명>

4) Polymorphism

  • 서로 다른 클래스의 객체가 동일한 행동을 각자의 방식으로 동작하는 것
  • 동적 바인딩(Dynamic Binding)
    ➔ 다형성을 사용하여 메소드를 호출할 때 발생
    Runtime에 결정됨
    ➔ 실제 참조하는 객체가 sub 클래스, sub 클래스의 메소드를 호출
class Vehicle
{
	void ride() { System.out.println("Ride a vehicle"); }
}

class Car extends Vehicle
{
	void ride() { System.out.println("Ride a car"); }
}

int main(void)
{
	Vehicle v = new Vehicle();
    v.ride();
    v = new Car();
    v.ride();
}

"Ride a vehicle", "Ride a car"가 순차적으로 출력

  • 정적 바인딩(Static Binding)
    Compile time에 결정됨
    ➔ 변수의 타입이 super 클래스, super 클래스의 메소드를 호출
class Vehicle
{
	static void ride() { System.out.println("Ride a vehicle"); }
}

class Car extends Vehicle
{
	static void ride() { System.out.println("Ride a car"); }
}

int main(void)
{
	Vehicle v = new Vehicle();
    v.ride();
    v = new Car();
    v.ride();
}

"Ride a vehicle"이 두 번 출력

  • static method는 overriding 할 수 없음
    ➔ static method는 컴파일 시, 메모리에 올라감
    ➔ 객체 생성과 상관이 없음
profile
programmer

0개의 댓글