오버로딩과 클래스
1. 메소드
(1) 메소드와 메모리
메소드는 실행되면 메모리의 Stack영역에 메소드 실행에 필요한 저장공간이 생성된다
메소드 내부에서 선언한 변수(지역변수, 매개변수)들의 저장공간이 생성된다
메소드의 코드가 모두 실행되어 종료되면 stack여역에서 해당 메소드의 저장공간이 삭제된다(메모리 해제)
지역변수의 저장공간이 사라지므로 지역변수는 사용이 불가능하다
(2) 메소드의 매개변수와 인수
매개변수(parameter) : 외부에서 전달받아 값을 저장하고 메소드 내에서 사용할 변수
인수(argument) : 메소드를 사용할 때 메소드의 매개변수로 전달될 값(실제 값)
- 메소드의 인수와 매개변수는 반드시 타입이 일치하거나 자동형변환이 가능한 타입이어야 한다
- return 되는 값은 반드시 return 타입과 일치하거나 자동형변환이 가능한 타입이어야한다
2. 메소드 오버로딩(Overloading)
매개변수의 개수, 순서, 타입이 다르면 같은 이름의 메소드로 선언할 수 있다
반환타입은 오버로딩에 영향을 주지 않는다
다형성 -> 오버로딩, 오버라이딩 : 같은 코드로 다른 기능을 하는 것을 의미함
(1) 오버로딩의 조건
리턴타입은 같아도 상관없음
메소드이름이 동일해야함
매개변수의 타입, 개수, 순서가 달라야함
(2) 오버로딩 시 주의할 점
매개변수의 타입, 개수, 순서가 동일한 경우 매개변수의 이름이 다르다고 해서 오버로딩이 아니다
리턴타입만 다르고 매개변수가 동일한 경우 오버로딩이 아니다
(3) 오버로딩이 가능한 이유
컴파일 할 때 메소드 이름이 다르게 지정되기 때문에
매개변수의 개수가 메소드 호출 시 전달한 인수값의 개수와 같은 메소드를 선택한다
매개변수의 타입이 메소드 호출 시 전달한 인수값의 타입과 같은 메소드를 선택하낟
-> 매개변수의 타입이 일치하는 메소드가 없을 때 전달받은 인수값보다 큰 타입이면 해당 메소드가 호출된다
(4) 오버로딩을 사용하는 이유
동일한 기능의 메소드를 정의할 때 다양한 입력값(매개값, 인수값)을 받기 위해 사용한다
프로그램이 커지면 메소드가 많아지게 되는데 이때 동일한 메소드를 매개값에 따라 다르게 이름을 정의하면
복잡하고 관리하기가 어려워지기 때문이다
+) call by value(pass by value), call by reference(pass by reference)
메소드 호출 시 매개변수를 전달하는 방식
1) call by value : 값에 의한 호출(JAVA)
메소드에 인수로 전달되는 것은 변수의 값 자체
메소드 내에서 매개변수의 값을 변경하더라도 원본 변수의 값은 변경되지 않는다
2) call by reference : 참조에 의한 호출(C++)
메소드에 인수로 전달되는 것은 변수의 주소값(참조값)
메소드 내에서 매개변수를 통해 참조된 객체를 변경하면 원본 변수의 값도 변경된다
메소드 정리
- 메소드 정의 순서 6단계
- 메소드 호출 방법 4가지 / 호출하기 위해서 static 붙이거나 객체를 만든다
- 메소드 오버로딩
- 자바에서는 call by value로만 매개변수를 전달한다
3. 클래스
(1) 객체지향 프로그래밍
추상화된 클래스로 객체를 만들고 객체들 간의 관계 맺어 상호작용하는 프로그래밍 기법
-> 객체가 주인공
추상화(객체 모델링)
공통적인 특징을 파악하여 하나의 묶음으로 만들어 내는 것
사람클래스
특징(속성) => 이름, 나이, 핸드폰번호, 성별, 주소
행동(메소드) => 말하기, 듣기, 걷기, 먹기
자전거 공장 => 설계도면(4발자전거)
1. 사용자 정의 타입입니다(자료형)
클래스를 사용하면 여러 타입, 여러 값을 저장할 수 있는 저장공간을 만들 수 있다
클래스 안에 선언된 변수를 사용하고 싶다면 해당 클래스 타입으로 변수를 선언해야한다
ex) 학생별 java, c, python 점수, 평균 점수, 학점 A, B, C, F, 이름 등 저장하고 싶다
점수는 정수형 배열로 저장이 가능하지만 평균점수, 학점, 이름은 불가능하다