220107

조영혜·2022년 1월 7일
0

Java

메소드 오버로딩(Overloding)

: 같은 기능, 같은 이름의 메소드를 중복정의 하는 것 . 매개변수의 개수나 타입이 달라야함.

  • 메소드 이름이 같아야하고, 매개변수의 개수, 타입, 순서가 달라야함. 매개변수는 같고 리턴타입이 다른 경우는 오버로딩이 아님. 오버로딩된 메소드는 매개 변수에 의해서만 구별될 수 있음.

객체지향 프로그램

함수형 언어

: 자료 처리를 수학적 함수의 계산으로 취급하고 상태와 가변 데이터를 멀리하는 프로그래밍 패러다임.
실무에서는 객체지향 언어와 혼용해서 자주 사용함.

OOP (object oriented programming)

: 프로그램을 명령어의 목록으로 보는 시각에서 벗어나, 여러개의 독립된 단위, "객체"들의 모임으로 파악하고자 하는 것.

  • class : 설계도면.

ex)게임에서 필요한 캐릭터가 어떻게 생겼는지, 어떤 기능을 가지고 있는지 구체적인 정보를 설계해야함. (머리색깔, 눈 색깔 - 속성(field. 변수, 상수(final)) / 걸어다닌다. 공격한다. - 메서드) 이정도 까지만 정의해주는 것.

  • object : "객체".

클래스를 이용해 만든 것을 실제로 구현한 형태. 클래스를 통해 실체가 만들어 지면, 오브젝트는 여러개 생성 할 수 있음. 그 각각의 독립적 데이터(=인스턴스).

객체지향 프로그래밍의 특징

  • 추상화 (Abstract))(ex. 그림만 보고 어떤 그림인지 아는 것. 객체의 특징 추출.)
    : 어떠한 객체에서 공통된 속성와 행위를 추출하는 기법.
    : 코드 상에서 구현(로직) 부분을 제외한 오직 선언부분만을 설계.
    -> 기능 선언 정도만 하고, 어떻게 기능할 건지는 추상화 단계에서 안함.
    : 상세한 정보는 무시하고 필요한 정보들만 간추려서 구성. (추상클래스 참고)
  • 캡슐화 (Encapsulation)
    : 관련된 필드(속성)와 메소드(기능)를 하나로 묶고, 실제 구현 내용을 외부로부터 감추는 기법. (정보 은닉->변수, 로직을 보호하기 위해.
    : 만일의 상항(타인이 외부에서 조작)을 대비해서 특정 속성이나 메소드를 사용자가 조작할 수 없도록 숨겨 놓은 것.
    : 외부에서 공개된 메소드(기능)의 인터페이스를 통해 접근할 수 있다. (ex. int volumn = 20; 했을 때 볼륨 높낮이 조절할 수 있어야 하니까 공개된 메소드인 volumn up, volumn down을 통해서만! 조절 가능함. )

  • 상속 (Inheritance)
    : 이미 작성된 클래스(상위 클래스)의 특성을 그대로 이어받아 새로운 클래스(하위클래스)를 생성하는 기법.
    : 기본 코드를 그대로 재사용하거나 재정의 -> 재사용+확장

  • 다형성 (Polymorphism)
    : 메소드 오버로딩. ex) 리모컨 하나로 전원 버튼 누르면 각각 티비, 빔프로젝터 등에 같은 기능을 수행할 수 있음.
    : 다양한 형태로 나타날 수 있는 능력.
    : 같은 기능(메소드)를 호출하더라도 객체에 따라 다르게 동작하는 것.
    : 상위클래스의 동작을 하위클래스에서 다시 정의하여 사용하는 것 또한 다형성으로 볼 수 있다.

오버로딩 : 메소드의 매개변수(개수, 타입, 순서)를 다르게 하는 것.
오버라이딩 : 매개변수, 반환값, 모두 동일. 로직만 다르게 하는 것.

  • 객체지향 프로그래밍의 장점
    : 신뢰성 있는 소프트웨어를 쉽게 작성할 수 있다.
    : 코드의 재사용 용이
    : 유지보수 용이
    : 직관적인 코드 분석 가능
    : 소프트웨어 생산성 향상

오브젝트 클래스 : 모든 객체의 최상위 클래스.

생성자

: 메소드
: 생성자 이름은 클래스 이름과 동일.
: 리턴 타입을 지정할 수 없다.
: new를 통해 객체를 생성할 때만 호출되어 객체의 초기화를 담당.
: 하나 이상 선언되어야 함. 한개는 무조건 필수!

  • 개발자가 생성자를 정의하지 않으면 자동으로 기본 생성자(default constructor)가 정의됨.
[public]클래스(){}
// 컴파일러에 의해 자동 생성.
// 만약 defalut생성자만 존재하고 defalut에 아무런 기능이 없을 경우, 생략 가능. 
  • 생성자 오버로딩
    : 같은 이름의 메소드를 여러개 정의-> 매개변수 타입, 개수, 순서가 달라야함.
    : 매개변수의 타입, 개수, 선언된 순서 같은 경우, 매개 변수 이름만 바꾸는 것은 생성자 오버로딩이 아님.
    why? 내부에서 제공되는 다양한 데이터를 사용하여 객체화 시키기 위함.
    : 클래스에 생성자가 하나라도 존재하면 자동으로 기본 생성자가 생성되지 않음. ->한개 이상의 생성자를 이용했다면 기능이 없어도 새로 생성자 만들어야함.
  • this() : 다른 생성자 호출
    : 필드 초기와 내용을 한 생성자에만 집중 작성하고 나머지 생성자는 초기화 내용 가진 생성자로 호출. 생성자 오버로딩 증가 시 중복코드 발생 문제 해결.
    생성자 첫줄에서만 허용!
클래스 ( [매개변수, ...]){
this(매개값, ...,, ...); // < 원래 이자리에 다양한 초기화 코드가 작성이 되어야 하는데 그 초기화코드를 작성하지 않고 대신 다른 생성자에서 초기화 코드를 실행할수 있게 함. 
실행문;
}

0개의 댓글