티스토리 뷰
JVM메모리 구조

Method Area
프로그램 실행 중 어떤 클래스가 사용되면 그클래스에 대한 정보(클래스 데이터) 저장 및 클래스변수(CV)를 생성
Heap
프로그램 실행 중 생성되는 인스턴스는 모두 이곳에 생성 , 인스턴수 변수도 (iv) 생성되는 공간
Callstack(호출스택) or excution stack
메서드 작업에 필요한 메모리 공간을 제공
메서드가 호출되면 호출스택에 호출된 메서드를 위한 메모리가 할당, 작업을 수행하는 동안 지역변수(매개변수포함)들과 연산의 중간결과 등을 저장하고 사용 . 작업 완료시 메모리공간은 반환되어 비워짐

메서드란?
-문장들의 묶음(작업단위)
-값(입력)을 받아서 처리하고 , 결과를 반환(출력)
장점: -중복코드 제거 ,관리 용이 , 재사용가능

지역변수(local variable lv):
메서드 내에 선언된 변수들은 메서드내에서만 사용할수있다. 서로 다른 메서드라면 같은 변수명 사용 가능
인수(argument)와 변수(parameter)
인수 타입/개수 /순서 = 매개변수 타입 /개수 /순서
매개변수 선언시 주의사항
int add(int x, int y)//ok
int add(int x, y)//error
메서드 실행 과정

반환 타입( return type)
메서드 작업 수행 결과(출력)인 반환값의 타입을 적는다.
단 , 반환값이 없는 경우 반환타입을 'void'를 적어야 한다.

int add(int x, int y) {
int result = x +y;
return result;} //result 반환타입은 int 일치해야함
반환타입이 있는경우 return 문 생략불가
void print99danAll(){
for (int i =1;i<=9;i++){
for (int j=2; j<=9;j++){
System.out.print(j+"*"+i+"="+(j*i)+" ");
}
System.out.println();
}
이처럼 void 인 경우 return문 생략가능
기본형 매개변수(read only) Call by Value
package practice;
class Data{ int x;}
public class Ex6_6 {
public static void main(String[] args) {
Data d = new Data();
d.x= 10;
System.out.println("main(): x ="+d.x);
change(d.x);
System.out.println("After change(d.x)");
System.out.println("main(): x="+d.x);
}
static void change(int x ) {
x= 10000;
System.out.println("change():x"+x);
}
}
참조형 매개변수(read & write) Call by reference
class Data2{int x;}
public class Ex6_7 {
public static void main(String[] args) {
Data2 d = new Data2();
d.x= 10;
System.out.println("main(): x="+d.x);
change(d);
System.out.println("After change(d)");
System.out.println("main() : x="+d.x);
}
static void change(Data2 d){
d.x=100000;
System.out.println("change () : x= "+ d.x);
}
}
참조형 반환타입
class Data3{int x;}
public class Ex6_8 {
public static void main(String[] args) {
Data3 d = new Data3();
d.x=10;
Data3 d2=copy(d);
System.out.println("d.x="+d.x);
System.out.println("d2.x="+d2.x);
}
static Data3 copy(Data3 d){
Data3 tmp= new Data3();
tmp.x=d.x;
return tmp;
}
}
| Static메서드 | 인스턴스 메서드 |
| 객체생성없이 '클래스명.메서드명();' 으로 호출 인스턴스 멤버(iv,im)와 관련없는 작업을 하는 메서드 메서드내에서 iv 사용불가 인스턴스메서드 호출불가 Static을 언제 붙여야할까? -클래스 멤버변수 중 모든 인스턴스에 공통값을 유지해야하는것이 있는지 보고 static붙임 -메서드 중에 인스턴스 변수나 인스턴스 메서드를 사용하지 않은 메서드에 static 붙일 것을 고려한다. |
인스턴스 생성후' 참조변수.메서드명();' 으로 호출 인스턴스 멤버(iv,im) 와 관련된 작업을 하는 메서드 메서드내에서 iv사용가능 |
class MyMath{
long a ,b ;
long add(){ return a + b;)//인스턴스 변수 a,b만을 이용해서 작업하므로 매개변수가 필요없다.
//인스턴스 변수와 관계없이 매개변수만으로 작업이 가능하다.
static long add(long a, long b){return a+b; } // a,b는 지역변수
}
class Test {
public static void main(String arg[]) {
//클래스 메서드 호출 .인스턴스 생성없이 호출가능
System.out.println(MyMath.add(100L,200L));
// 인스턴스 메서든 객체생성 후에만 호출이 가능함
Mymath m= new Mymath();
m.a= 100L;
m.b= 200L;
System.out.println(m.add());
}
메서드 오버로딩
하나의 클래스에 같은 이름의 메서들를 여러 개 정의하는 것을 메서드 오버로딩이라고함
오버로딩의 조건
메서드명이 같아야 한다.
매개변수의 개수 또는 타입 달라야 한다.
매개변수는 같고 리턴타입이 다른 경우는 오버로딩이 성립되지 않는다, 따라 위 원칙을 주의해서 오버로딩을 하자!

참고문헌 :남궁성, 『자바의정석』, 도우출판
'TIL > JAVA' 카테고리의 다른 글
| 객체지향(OOP)다형성 (0) | 2023.01.09 |
|---|---|
| 객체지향(OOP)상속 (0) | 2023.01.06 |
| 객체지향(OOP)Part1요약 (0) | 2022.12.26 |
| 배열 (0) | 2022.12.23 |
| 제어문 (0) | 2022.12.22 |
- Total
- Today
- Yesterday
- MegabyteSchool
- 스프링 # 스프링부트 #서버와클라이언트 # 공부기록
- JSON
- 패스트캠퍼스
- 빌드 오류 #java버전오류
- 알고리즘 복잡도 #알고리즘 공부 #이것이코딩테스트다 #이코테 #나동빈
- 개발자취업부트캠프
- JSON #json #개발자필수지식
- 내일배움카드
- Spring Boot 공부
- 자료구조
- application.yml 설정
- 자료구조 #CS공부
- 국비지원
- 메가바이트스쿨
- HTTP #메타코딩
- 국비지원교육
- mysql #인텔리제이랑 연결 #다시설치 및 재실행
- spring #springboot #스프링부트공부 #스프링부트실습 #메타코딩유튜브
- JSON에 대해서 알아보기
- git 개념 #spring전 git #간단한 개념만
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |