Java개념 - 전반부( Class, 상속, overriding, 생성자)
이번 주는 자바의 기본 개념에 대해서 공부하였다.
주요 내용은 Class, Static, 생성자, 상속, 오버라이딩, 오버로딩에 대한 개념들이다.
많이 헷갈렸지만 계속 반복하니 개념은 잡힌 것 같다.
일단 다른 개념들에 앞서서 Java는 객체지향 프로그래밍이란 특성을 가지고 있다. 나는 이 객체지향 프로그래밍을 큰 것들을 더욱 더 잘게 쪼개어 유지/보수가 쉽게 할 수 있는 것? 이라고 이해했다. 거기서 쪼개진 것들을 Class라고하고 그것들의 기능을 Method라고 한다.
아래의 사진은 Java의 가상머신인 JVM의 기본동작 구조이다. 컴퓨터 OS바로 위의 구조이다.
첫 번째로 클래스와 인스턴스이다.
클래스는 연관되어 있는 모든 변수와 메소드의 집합이다. 인스턴스는 이러한 클래스로 만들어진 객체를 지칭한다.
비유를 하자면 클래스는 설계도, 인스턴스는 설계도로 만들어진 제품이라고 생각하면 된다.
여기서 클래스 멤버인 변수와 메소드 앞에 static을 붙일 경우, 모든 인스턴스에서 공유되어진다. 그리고 메모리 상으로도 효율적인 프로그래밍이 가능하다.
그리고 이것들을 사용하기 위해서 가장 주의할 점이 있다!! 아래의 예시를 보자.
C1이라는 Class를 생성했다. 클래스와 인스턴스의 관계를 나타내기 위해 클래스 멤버와 인스턴스 멤버의 사용을 보자.
첫 번째로 클래스 메소드에서 클래스 변수는 사용 가능.
두 번째로 클래스 메소드에서 인스턴스 변수는 사용 불가능.
세 번째로 인스턴스 메소드에서 클래스 변수는 사용 가능.
네 번째로 인스턴스 메소드에서 인스턴스 변수는 사용 가능.
그리고 인스턴스 객체를 생성하고 안하고 차이도 있다.
위의 Class에서 인스턴스 메소드들은 무조건 인스턴스 객체를 생성한 후 사용 할 수 있다.
그러나 static이 붙은 클래스 메소드들은 사용가능하지만 메소드 내에 인스턴스 변수가 있을 경우에는 사용이 불가능.
다음으로 생성자(constructor)를 살펴보자.
객체를 생성할 시 변수들을 초기화 해줘야하는데 그것을 할 수 있게 해주는 것이 생성자이다.
특징으로는 리턴 값이 없고 클래스와 이름이 같아야 자바가 생성자라고 인식한다. 만약 매개변수 갯수를 다르게 하고싶으면 똑같은 메소드를 한 개 더 생성해주고 사용 시 매개변수의 갯수에 따라 생성자가 실행된다.
다음으로 상속(Inheritance)의 개념이다.
어떤 객체가 있을 때 그 객체의 필드(변수)와 메소드를 다른 객체가 물려 받을 수 있는 기능을 상속(부모와 자식 관계)이라고 한다.
여기서 상속을 사용할 때 부모의 멤버를 건드려야 하거나 생성자에 관한 부분을 super로 제어 할 수 있다.
마지막으로는 오버라이딩(overriding)과 오버로딩(overloading)의 개념이다. 이 부분에서 많이 헷갈렸다. 일단 간단하게 오버라이딩은 하위 클래스에서 상의 클래스와 동일한 메소드를 정의하면 부모 클래스로부터 물려 받은 기본 동작 방법을 변경하는 효과를 갖게 되는 것. 리턴 타입, 함수명, 매개변수는 부모와 항상 동일해야 한다.
그리고 오버로딩은 매개변수가 다르면 이름이 같아도 서로 다른 메소드가 되는 것이다.
정리하면
오버라이딩을 이용해서 부모 클래스의 메소드의 동작방법을 변경하고, 오버로딩을 이용해서 같은 이름, 다른 매개변수의 메소드들을 여러개 만들 수 있다는 사실!!!!
이렇게 전반부를 끝내고 후반부로 고고씡~ 가면 갈수록 태산이네,,,, 최근에 배운 언어들 중에 가장 어려운 난이도 인 것 같다.. 내 손에 익숙해질때까지 계속 연습하고 연습하자!