ENFJ 비전공자 개발스터디

자바 Java 메소드 method 본문

Java

자바 Java 메소드 method

madb 2021. 12. 2. 10:11
반응형

 

메소드 (처리 기능 class) 

 

메소드 목적 - 반복코드이고, 복잡한 단계 거치는 코드들을 묶는다, 구조화 시킨다 

접근지정자 static final 리턴타입 이름(파라미터)  => 시그니처 

접근지정자를 명시하지 않으면 default이다 

 

메소드 기본구조 

실행되는 영역들은 바디영역이다.

중괄호{ opne } close 가 영역을 만들어 놓는 놈이다.

 

메소드의 처리 단계 

1) 선언  - 말 그대로 명세서를 만들어 놓는다 

2) 실행가능 - new 하거나 static 

3) 호출  - 메소드 실행 

 

scanner로 밖에서 키보드로 값을 받아서 반지름으로 저장 ->int radius 값  <- argument (대입되는 값)

(받는 놈) parameter  (int) 로컬변수(지역변수) - 처리 - 결과 (데이터타입 대입되는 것)- 반환 return (리턴 타입 return type)

 

데이터타입 = 리턴타입 동일해야 한다.

argument(대입되는 값) = parameter (받는 값)  동일해야 한다 

 

클래스 class 는 변수 (private) 와 메소드 (기능) 로 구성되어 있다.

변수가 privated하기 때문에 안보이고, 클래스에서 메소드가 기능한다.

 

메소드 용도, 라이브러리 외워야 한다.

 

메소드는 함수라고 해도 상관없다.

단 클래스안에 있는 함수를 메소드라고 부른다.

 

자바에서 모든 함수는 반드시 클래스 안에 있어야 한다 

 

메소드 이름은 이른뿐이다 (식별자로, 기능과 관련된 이름 부여 필요)

메소드 인자 (매개 변수, 파라미터= 대입받을 수 있게 공간 만들어라 (데이터 타입 + 이름까지 붙으면 변수)는 이야기) 같은 말이다 

데이터 타입 + 이름 = 변수 

리턴타입 가장 중요. 

접근지정자 static final 

접근 지정자 public private protected default 

argument는 호출(실행)할 때 넣어야 한다 

 

접근 범위 정리

범위가 제일 넓은 것은 public이고 >protected>default>private 

 

접근지정자

public - 접근제약이 없다

protected - 다른 패키지 접근 가능하나, 단 상속시에만 가능

default - 같은 패키지 접근 가능 (static final)

private - 클래스 외부 접근을 막는다 (해당 클래스 내부에서는 접근이 가능하다) 

 

리턴타입 - 메소드의 핵심이다.

 

메소드 선언 -> 실행가능 -> 호출  call(인자 전달)

 

1) 기본 데이터 타입 전달 call (값저장) => call by value 

2) 레퍼런스 전달 call (주소를 전달 ) ==> call by reference

3) 배열 전달 (주소) - 여러개 저장한 것을 하나로 묶은 것 

기본타입 배열 , 레퍼런스타입 배열 (객체배열)

 

기본타입 -원칙적으로 다 숫자이다, 핵심은 값저장이다

논리 - 논리타입은 연산에 사용될 수 없다. (대입은 가능하다) 

          boolean (true, false) 리터널 저장 

숫자 - 정수   char - 문자 - 컴퓨터 내부적으로 처리할때는 정수이다  2byte 

                    byte, short, int(defalt), long (8byte)

        - 실수 - float, double (default) 

 

Call by Value = > 값에 의한 호출 (메소드) 

public class CallbyValue {

 void increase(int m) {

m= m+1;

}

main(s[]0}

int num = 10; -> 메인메소드안의 지역변수 

increase(num) ;

System.out.println(num);

}  // main close -> 메인영역이 삭제되고 cpu에서 실행될 코드가 없는 거고, 프로그램 종료된다 

 

 

** 카멜 표기법 : 클래스이름은 대문자로 시작하고 그 다음 단어는 대문자로 쓰기 

private 내부만 사용 가능

static 바로실행가능 

{} 영역생성, 영역삭제 

m 지역변수

** 습관적으로 지역변수는 초기화해야한다 - 생성후 바로 값대입 

데이터 타입별로 초기화 int => 0 double =>0.0 boolean =>false String=>"" 큰따옴표

** 들여쓰기 정확하게 하는 것 중요하다 

(object안에 있는 ) 멤버변수는 자동초기화 된다. 

 

-----------

그림 

method 영역

CallbyValue를 적재한다 (private static increase() public static main()) 

JVM이 메인메소드를 호출한다 (JVM이 CallbyValue 밖에 있다) 

void increase(int m){

m=m+1;

}

vod main(s[])}

(요기서부터 바디영역) int mum = 10;

increase(num);

system.out.println(num);

} (요기까지 바디영역) 

 

stack 영역

stack 영역에 main frame 생성한다 (바디영역이라고 위의 것) 

int num = 10 ; 

10 리터널 상수가 들어간다. 

increase(num) 호출

system.out.println(num);

num이 정수인데 문자열로 변환시키고 난 다음에 모니터에 출력하라

 

-----

그림 2 

Call by Reference( 주소값에 의한 호출) 

public class Circle {

public int radius;

public Circle (int r){

this.radius = r

}

}

public class ReferencePassing {

main(){

Circle pizza = new Circle(10); 

private static void increase(Circle m) {

m.radius++

}

 

new 한 다음에 생성자 호출해서 초기화를 하겠다.

int r => 파라미터 

r에 10이라는 숫자 들어간다 

공간생성한 후에 10이라는 값을 처음 대입.=> 초기화한다 

 

p36 인지 전달 - 배열이 전달되는 경우 

배열을 메소드에 넣겠다 

배열은 여러개 저장하는 것 

 

1) 선언

public int sum ( int kor, int eng, int mat){

int hap = kor + eng + mat;

return hap;

} 배열 묶는다 

int[] jumsu = new int[3]

jumsu[0]

jumsu[1]

jumsu[2]

 

public int sum ( int [] j){

int hap = j[0]+ j[1]+ j[2]

 

------

데이터 타입

기본타입  -> 값저장 

레퍼런스 타입  -> 주소 저장 

 

응용해서 배열로

 

기본타입의 배열 

레퍼런스 타입의 배열

 

Circle[] c = new Circle[3]

객체 배열  Arrayobject 

c[0]  = new Circle();

 

int[] a = new int[3]

a[0] = 10;

a[1] = 20;

a[2] =30;

 

----- p38

메시지 오버로딩 Overloading -> 기법 -> 방법론적 접근 필요 

한 클래스내에서 이름이 같은 메소드 작성기법 

매개변수 = 파라미터 

생성자는 리턴타입이 없다 

 

이름이 동일하기 때문에 구별법이 필요하다 

첫번째 타입 상이 해야 한다 

두번째 개수가 상이해야 한다 

리턴타입은 오버로딩과 관련없다 (주의할 것) 

 

Circle (int radius) <- 요 경우는 개수가 상이된 오버로딩 

Circle (int radius, String name) 

 

두 수 입력받아 합(sum) 을 구하는 메소드를 만들어보겠음 

두 수 byte, short, int, long, float, double 6개 매소들를 만들어야..

 

sumByte (byte b1, byte b2) {

}

sumShort (short s1, short s2){

sumInt(int i1, int i2)

sumLong(long, long) 

sumFloat(float, float)

sumDouble(double, double) 

sumIntDouble(int, double) 

 

42페이지 객체 소멸

객체 - object => heap 영역에 있는 메모리영역 

자바는 객체 소멸 연산자 없다 

객체 생성 연산자는 new밖에 없다 

jvm이 객체소멸해준다 -> 개발자는 신경쓸 필요가 없다.

 

자바의 패키지 개념

bin - lib 클래스 파일 , main 클래스 파일 

 

접근지정

클래스 - public - 주로 사용 

           - default - 같은 패키지내 사용 

변수 - public  x

        -protected - 상속

        -pdefault x

        -private - 일반 

메소드  public <- 주로 퍼블릭하게 씀 

            private 

 

멤버라 함은 - 변수와 메소드

멤버 -변수 접근지정자

       -메소드 접근지정자

 

멤버  static 변수 (공간생성), static 메소드 (실행가능) - 적재될때

        non- static 변수 (공간생성), non- static 메소드 (실행가능) - new 될때

 

static한 놈은 static한 놈만 접근가능하다 ( =new한 놈 접근못한다) 문법으로 막아놓았다.

 

public 멤버 - 변수x (변수를 지정하지 않는다, 캡슐화 - 데이터 보호) 메소드 일반

 

57페이지가 핵심

왜 static하게 만드느냐. 중요 

static의 활용 

공유변수를 만들고자하는게 목적이다. 

static 변수 으로 선언한 멤버는 클래스(object) 의 객체들 사이에 공유 

static 메소드 -> 공유 x -> new하기 전에 실행가능하게끔 한다 

 

--------

자바개발자 -> cpu Intel /AMD  I5 이상 인텔 11세대 이상? 메모리 16기가 보통 200만원짜리 삼 

AI 개발자  인텔 cpu i9 최상급 램은 32기가 그래픽 gpu 존재 -> 노트북 보다 데스크탑 -구글 클라우드 시스템 빌려 쓰는 

 git docker도 해야 함 

 

선생님이 쓰시는 거 core 64 amd 399 메모리 129기가 그래픽카드 3090 2개 

 

 

반응형