ENFJ 비전공자 개발스터디
자바 Java 메소드 method 본문
메소드 (처리 기능 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개
'Java' 카테고리의 다른 글
자바 Java 스레드 thread (0) | 2021.12.13 |
---|---|
자바 Java 컬렉션 collection set list map 제네릭 Generic Arraylist (0) | 2021.12.09 |
자바 Java 상속 inheritance 다형성 polymorphism 개념 및 정리 (0) | 2021.12.06 |