개발 공부중

[TIL] 변수/ return 본문

JAVA

[TIL] 변수/ return

개발자 leelee 2022. 12. 2. 00:01
학습목표 : 참조형 변수와 원시형 변수를 구분할 수 있다.
학습목표2 : return을 활용할 수 있다.

 

  • 보통 한 개의 소스 파일에는 파일명과 똑같은 public 클래스 하나만 정의한다.
  • 메소드(동사) 선언하기 : 접근제한자와 static은 생략 가능하다.
(접근 제한자) (static) [리턴타입] [메소드명] [(파라미터)]

 

  • 접근 범위 순서 
    • private : 자신의 클래스 내에서만 접근 가능
    • default : 접근 제한자 명시가 없을 때 기본 값, 동일한 패키지 내에서만 접근 가능
    • protected : 파생클래스에서 접근 가능
    • public : 접근 제한 없음

 

  • static 변수 (정적 변수)
    • 메모리에 고정적으로 할당된다는 의미로 변수 값을 공유하는 목적으로 사용
    • 인스턴스화 없이도 호출이 가능해짐
    • 보통  public final과 함께 사용
    • 메소드 이름 앞이나 변수명 앞에 쓰임

 

  • 데이터 타입은 원시 자료형(primitive type)과 참조 자료형(reference type)으로 구분된다.
  • 참조형 변수 : 부르면 주소가 나옴
    • 배열, 객체 함수..
    • 여러 데이터를 담을 수 있고 heap에 저장
    • 변수에는 데이터가 저장된 메모리 상의 주소가 저장됨
  • 원시형 변수 : 부르면 값이 나옴
    • string,  bigint, undefined, symbol, (null) 
    • number : char, byte, short, int, long, float, double - 정수형, 실수형 - 크기가 다름, 범위 다름, scope 다름.
    • boolean - 제어문에서 중요함 -흐름을 다르게 할 때 -분기문(if, switch)
    • 호출하면 값이 나옴
    • 원시형 변수에는 기본값이 있음 (= 0, null)
    • 원시형 변수를 초기화할 때는 대입연산자(=)를 사용한다.
    • 하나의 값만 담을 수 있고, 아니면 오버라이트(덮어쓰기)됨 
    • 변수의 사용목적은 일괄처리에 있음
//변수는 하나의 값만 가질 수 있다 예시문
public class Variable3 {
    public static void main(String[] args) {
        int i = 1;
        System.out.println(i);
        i=3;
        System.out.println(i);
        i= 5;
        System.out.println(i);
    }
}
//일괄처리 예시문
String carName ="프라이드";  // 변수 바꾸면 전부 바뀜
System.out.println(carName);
System.out.println(carName);
System.out.println(carName);

 

  • 문자열의 비교/ 주소값 비교하기
    • equals 는 두개의 문자열이 동일한지 비교하여 결과값을 리턴함
    • == 은 두개의 자료형이 동일한 객체인지 판별할 때 사용
public class String1 {
    public static void main(String[] args) {
        /* String은 2가지로 초기화 가능함 대입연산자와 new를 사용하는 방법이 있음
        * s1과 s2의 주소번지는 같니? 참 혹은 거짓 선택하기 <<같음
        * s3과 s4의 주소번지가 같니? 참 혹은 거짓 선택하기 << 다름
        * 만일 s3이 가리키는 문자열이 s4와 같은지를 비교하려면 어떡하지? 
        * 주소번지가 가리키는 값을 비교하려면 equals라는 메소드를 활용
        * 주소번지를 비교할 수 있는 것은 참조형 타입인 경우만 가능
        * 원시형 변수는 주소번지를 비교할 수 없음
         */
        String s1 = "안녕";
        String s2 = "안녕";
        String s3 = new String("안녕");
        String s4 = new String("안녕");
        System.out.println("s1과 s2 비교 ====> "+ (s1==s2));  //true
        System.out.println("s2과 s3 비교 ====> "+ (s2==s3));  //false
        System.out.println("s3과 s4 비교 ====> "+ (s3==s4));  //false
        System.out.println("------------------------------");
        System.out.println("s1과 s2 내용비교 ====> "+ s1.equals(s2));  //true
        System.out.println("s2과 s3 내용비교 ====> "+ s2.equals(s3));  //true
        System.out.println("s3과 s4 내용비교 ====> "+ s3.equals(s4));  //true
        //equals는 내용을 비교하는 메소드
        //String 클래스는 new를 사용하지 않고 객체를 생성하면 이미 같은 값이 존재할 때 기존 값을 참조한다.
        //완결편 : 참조형 변수는 new를 사용하므로 무조건 새로운 객체가 만들어진다.
	 }
}

  • 리턴타입
//type과 return type이 다를 때 오류 예제
import javax.swing.text.html.HTMLDocument.BlockElement;

public class Return1 {
    void m() {

    }

    int m1() {
        return 2;
    }

    double m2() {
        return 2.5;
    }

    boolean isView1() {
        boolean bool = true;
        return bool;
    }

    String getName() {
        String name = "이순신";
        return name;
    }

    public static void main(String[] args) {
        Return1 r1 = new Return1();
        // int x = r1.m();  // m()의 type은 void로 int x에 대입될 수 없어서 오류발생
        int y = r1.m1();
        // System.out.println(r1.m()); //void타입이라 반환할게 없어서 오류발생
        System.out.println(r1.m1());
    }

}
public class Method2 {
    //void일때와 반환형이 있을 때 출력하는 방법이 다름
    double m1(double d) {
        return 3.5; // 어떤 double d가 들어와도 3.5만 반환됨
    } 
    void m() {
    
    }

    public static void main(String[] args) {
        Method2 method2 = new Method2();
        //메소드 내부에 출력하는 문장이 없는 경우 외부의 메소드에서
        //그 메소드에서 결정된 값을 출력하려면 반환형이 필요함
        double result = method2.m1(1.5);
        System.out.println(result);   // 3.5 출력
    }
}

'JAVA' 카테고리의 다른 글

[TIL] 배열  (0) 2022.12.07
[TIL] 클래스와 인스턴스  (0) 2022.12.06
VScode 에서 java 프로젝트 생성하기  (0) 2022.12.01
[TIL] 변수선언 / 디버깅 방법  (0) 2022.11.29
JAVA를 위한 첫 설치  (0) 2022.11.29
Comments