6. ★객체와 함수, 메서드

zza·2023년 9월 13일
1

Java

목록 보기
6/19

객체 지향 프로그램

  • 액터: 요구사항 확인 - 동작을 관리하는 사람

    ex)
  1. 온라인 쇼핑몰의 객체: 구매자/판매자/상품
  2. 학생 객체 안에는 객체와 관련된 <학번, 이름, 전공, 성적 등>의 변수가 들어있다.
  • 객체: 만져지는 물건, 동작을 하는 사람/것
    ex) 책상, 판매자, 핸드폰, 주문 ...

★- 객체 생성 = class

- class(객체)는 여러가지 변수를 가질 수 있다. = 멤버변수

★함수와 메서드

  • 함수와 메서드(Method)는 특정 기능을 구현한 코드의 묶음을 말한다.

  • 메소드 : class에 포함
    ex) 아래 addNum 함수, main()

  • 함수 : 소속이 없다.

  • Java의 경우 calss안에 함수를 적으므로 용어 차이이다.

★함수


- 함수 정의

함수명(매개변수1, 매개변수2..) { 
	기능;
    return; }

: return x는 함수 내의 x값을 함수 밖으로 반환한다.

ex) return result;

- 함수 호출

: 변수 = 함수명(변수)
-> 변수 : 함수값 저장할 변수(없어도 호출되나, 값을 저장하려면 필요하다.

  • 함수 호출 시 매개변수 개수 맞춰야한다.

ex) int a = addNum(1,2);

  • public : 접근지정자 중 공공제를 의미.

  • static : 고정된. 한번 만들면 프로그램 끝날때까지 살아있다.

  • int : addNum()함수가 return해주는 result값의 자료형.

  • 프로그램 실행 시 컴파일러가 읽는 부분은 main이므로 FunctionTest 실행해도 아무것도 일어나지 않는다.

  1. main 내용 추가.
main() {
	int a= 3;
	int b = 5;
	int sum = addNum(a,b);
}
  1. addNum에 3, 5 대입되어 result변수 만들어진다.
  2. addNum의 결과 result값이 반환되어 sum에 대입

★함수 호출과 stack 메모리

  • 코드를 읽는 순서대로 stack에 쌓인다.
  • 언제나 main부터 읽는다.

-> main의 내용부터 순서대로 stack(스택)에 저장된다.

  1. a > b > sum 생성
  2. addNum함수 호출
  3. num1 > num2 생성
  4. result 생성

-> 프로그램 종료(코드가 사용되지 않을 때)시 코드들은 자동으로!!! stack에서 없어진다. : JVM이 해준다.( C언어와 차이점)

  1. addNum 끝나면 num1, num2, result (main의 a, b, sum 제외) 모두 사라진다.
  2. main 끝나면 a, b, sum 까지 사라진다.
  3. 깨끗-

★메서드

  • Method : 객체(클래스)에 필요한 기능을 구현하는 함수.

  • 멤버함수 라고도 한다.

  • (cf) class안에 변수: 멤버변수

  • 장점: 중복 코드를 제거하여 가독성을 높인다.

구조

  • 매개변수 = 인수 = 인자 = 파라미터

  • sum의 결과 반환(return)타입 = int

  • 반환값 없음 : void

메서드 호출과 반환


  • 함수에서 return을 만나면 그 아래 있는 명령들을 실행되지 않는다. break의 기능.
  • (cf) break는 반복문, switch문에서만 사용 가능.
  • printScore()함수에서 return아래 syso("점수")출력 명령은 실행되지 x.

※ chap3 - method

접근지정자

  • public : 다른 class에서도 사용 가능
  • private: 해당 class에서만 사용 가능
  • 접근지정자 안 쓰면 public이 기본값.

값 전달

★함수 호출 방법

  • call by value(값에 의한 호출)
    : 똑같은 값을 복사해서 사용한다.

    • 장점: 기존의 변수값(원본)에는 영향을 미치지 않는다.
    • 단점: 메모리 공간이 두배로 필요함(복사하니까)
  • call by reference(참조에 의한 호출)
    : 변수가 저장된 주소를 직접 참조해서 사용한다.
    -> 장점: 메모리 공간을 많이 차지하지 않는다.
    -> 단점: 기존의 변수값(원본)이 변경될 우려가 있다.

ex) value값에 의한 호출

  • 0값을 가진 변수 x, n 2개가 만들어진다.
  • increment함수 호출하면 n = 1이 된다.
  • x값은 여전히 0이다.

★★★메서드 오버로딩

  • 메서드 오버로딩: 메서드 이름은 동일하나 시그니처가 다른 메서드
  • 여러 타입의 매개값을 처리하기 위해 사용한다.

  • 함수명은 max()로 같다.
  • 매개변수 타입/개수가 다르므로 이를 이용해 서로 다른 max함수를 호출할 수 있다.

문제

Q-1)

  1. void
  1. 오버로딩
if(x%2 == 1){
syso(x)

:본체 = {}
:반환타입이 없는 void 함수이므로 return을 쓰지 못하고 print를 사용.

Q-2)
※ chap3 - programming

(1) 반복문 이용

(2) 반복문 없이 반복 -> 재귀함수 이용

재귀함수

  • 자기가 자기 자신을 부르는 함수
public static int factorial(int n)
int f = 1;

return n * factorial(n-1);
1. 함수 생성 후 함수명으로 호출

접근지정자 static 반환 함수명(인자)
	기능

2. 함수내에서 스스로 호출
	함수명(원하는 기능식);

문제

  1. o
  1. x
  1. x
    : 오버로딩
    1. 동일한 이름의 메서드를 선언
    2. 메서드 시그니처가 달라야 한다.
    ex) 매개변수 개수, 타입
    -> 반환 타입이 다른 것은 오버로딩이 아니다.
  1. return
    :호출한 메서드 = main()
    호출된 메서드 = factorial()

5(1). int i
: i 자료형 없음
: ; 없다
: 조건식 ->논리오류

5(2). int sum = 0, i = 0;
do {} while(조건식);
:sum값은 초기화 안되어있음
while() 뒤에 ; 있어야 한다.

  1. 25
    :1+3+5+7+9

  1. b = 9
    : switch 줄에서 a = 1
    case 들어가서 a = 2
    case 1 : b = 2+2 = 4 > break없다.
    case 2 : b = 4+5 = 9

  1. o
    :(1) b=2 이려면 1<=a<3 이어야 함
  1. 7
    :1+2+4
    for문에서 continue 만나면 조건식으로 돌아간다.

  1. 30
    :x = 1, y = 1, t = 1
    x = 2m y = 4, t = 5
    x = 3, y = 9, t = 14
    x = 4, y = 16, t = 30
profile
zza

0개의 댓글