Java - 몇 가지 메서드(2)

김형석·2025년 1월 12일

LG CNS AM Inspire Camp

목록 보기
8/18
post-thumbnail

1. main() 메서드의 입력 매개변수

1-1. 매개변수 - String[] args

  • 프로그램이 실행될 때 입력되는 값(즉, 전달되는 값)
  • Debug Configuration으로 Argument를 지정한 상태에서 디버그 시 매개변수가 출력된다.

2. 타입 변환

2-1. 래퍼 클래스(Wrapper class)

  • 원시 데이터 타입을 객체로 감싼 것이다.
  • 타입 변환 시 사용하는 메서드를 제공한다.

2-2. 타입 변환하기

  • 문자열 -> 정수: Integer.parseInt("String")
  • 문자열 -> 실수: Double.parseDouble("String")
  • 정수 -> 문자열: String.valueOf("Integer")
  • 실수 -> 문자열: String.valueOf("Float")

3. String 클래스

3-1. 객체 생성하기

3-1-1. new 키워드 사용하기

  • Java에서 권장하는 방법이다.
  • String str = new String("Hello"); 와 같은 형식으로 선언
  • 좌변은 Stack에, 우변은 Heap에 저장된다.
  • 우변에서 String()은 생성자이고, Hello는 저장하는 값이다.

3-1-2. 문자열 리터럴 사용하기

  • 문자열 값을 변수에 바로 할당하는 것이다.
  • String str = "Hello"; 와 같은 형식으로 사용한다.

3-1-3. 메모리 구조에서의 설명

  • String 클래스는 클래스 영역에 로드된다.
  • str 변수는 Stack 영역에서 공간을 확보한다.
  • "Hello" 값은 Heap 영역에서 공간을 확보한다.
  • str 변수는 Heap 영역의 "Hello"값의 주소를 참조한다.

3-2. String 클래스의 특징

  • 한번 정의된 문자열은 변경할 수 없다.
    • 문자열 내용이 변경된다는 것은 새 문자열을 포함하는 객체를 생성해서 사용한다는 의미이다.
    • 기존 객체는 제거된다.
  • 문자열 리터럴을 바로 입력해서 객체를 생성하는 경우, 같은 문자열은 같은 객체를 공유한다.
    • 참고)
      - new 키워드를 사용해서 객체를 생성하면 항상 새 공간에 할당된다.
      - 문자열 리터럴을 바로 할당하는 경우, 서로 다른 값이여야 서로 다른 공간에 할당된다.
      - 문자열 리터럴로 할당하는 경우, 할당된 값은 JVM 메모리 공간의 String Constant Pool에 저장된다.

3-3. 문자열 결합

  • '+' 연산자를 사용한다.

3-3-1. 결합 방식

  • 문자열 + 문자열 방식
    • 개별 문자열이 모두 Heap에 저장된다.
    • 결합은 앞에서부터 2개씩 진행
    • 각 결합 단계에서 생성되는 모든 문자열은 Heap 영역에 저장되어 다음 결합 단계에서 활용된다.
  • 문자열 + 기본자료형 또는 기본자료형 + 문자열
    • 기본 자료형을 문자열로 바꾸는 과정이 선행된다.
    • 모든 피연산자가 문자열이 되면 문자열 결합 방식을 따른다.

4. 클래스

4-1. 정의

  • 객체를 만들기 위한 설계도이다.
    • 객체는 '사용할 수 있는 실체'이다.
  • 한 개의 클래스로 여러 개의 객체를 만들 수 있다.
    • 확장을 간편하게 하는 요소이다.
  • 자바에서 제공하는 객체지향 요소 중 하나이다.
  • 클래스 선언 시에는 new 키워드와 생성자를 활용한다.
    • 클래스명 참조변수명 = new 생성자();

4-2. 클래스의 구조

4-2-1. 주요 구성

  • 필드: 클래스의 특징(속성)을 나타내는 '변수'이다.
  • 메서드: 클래스의 기능(함수)를 나타내는 요소이다.
  • 생성자: 클래스의 객체를 생성하는 요소이다.
  • 내부 클래스: 클래스 내부의 클래스이다.
  • 필드, 메서드, 내부 클래스를 클래스 멤버라고 한다.

4-2-2. 구조

  • package
    • 주석을 제외한 요소 중 소스코드 파일 맨 위에 위치한다.
    • 디폴트 패키지를 사용한다면 생략할 수 있다.
  • import
    • 타 패키지의 클래스를 사용할 때 필요한 구문이다.
  • class 클래스명 { 구성 요소 }
    • 외부 클래스이다.
    • public 클래스 이외의 클래스로, public 키워드를 사용할 수 없다.

4-3. 포인트 연산자

  • Java에서 Heap 영역에 직접 접근하기 위해 사용한다.
  • 필드명을 활용하는 방법과 메서드명을 활용하는 방법이 있다.
  • 사용 방법
참조변수명.필드명

참조변수명.메서드명()

4-4. 필드 vs 지역변수

4-4-1. 필드

  • 클래스 범위에서 정의된다.
  • 객체 인스턴스가 존재할 때 계속 존재한다(값이 유지된다)

4-4-2. 지역변수

  • 메소드 내에 정의된다.
  • 메소드가 사라지면 함께 사라진다.

4-4-3. 초기화가 되지 않은 경우

  • 필드는 강제 초기화되어 0이 된다.
  • 지역 변수는 강제 초기화되지는 않으며, 사용도 불가능하다.

4-5. 메서드

4-5-1. 구조

  • 제어자 + 리턴 타입 + 메서드명 + 매개변수
  • 리턴 타입은 void 혹은 자료형이다.
  • 매개변수는 생략 가능하다.

4-5-2. 종류

  • 리턴 타입이 void, 매개 변수가 없는 메서드
  • 리턴 타입이 void, 매개 변수는 있는 메서드
  • 리턴 타입은 있지만 매개 변수는 없는 매서드
  • 리턴 타입이 있고, 매개 변수도 있는 메서드

4-5-3. return의 역할

  • 리턴 타입이 있다면 반환하는 값(변수)을 의미한다.
  • 리턴 타입이 없다면 메서드 종료를 의미한다.

4-5-4. 메서드 호출

  • 클래스 외부에서 호출하기
    • 해당 클래스로 객체를 먼저 생성해야 한다.
    • 객체명.참조변수 형태로 호출한다.
  • 클래스 내부에서 호출하기
    • 동일 객체 내에서 메서드를 호출할 시, 객체 생성이 필요없다.
    • 이 경우, 함수 이름을 호출한다.
    • 단, static 키워드가 붙은 메서드는 static필드나 메서드만 호출할 수 있다.
  • 호출 시 매개변수에 대한 권장사항
    • 기본 자료형을 매개변수로 활용하는 경우, 값을 복사해서 사용한다.
    • 참조 자료형을 매개변수로 활요ㅛㅇ하는 경우에는 배열 주소를 활용한다.

4-5-5. 메서드 호출 시 발생할 수 있는 보안 취약점

  • public 메서드로부터 반환된 private 배열
    • getter 메서드가 잘못 구현된 경우 발생
  • private 배열에 할당된 public 데이터
    • setter 메서드가 잘못 구현된 경우 발생

4-5-6. 그 외 메서드 관련 개념

  • 메서드 시그니처
    • 메서드를 구분하는 기준
    • 메서드명 + 매개변수의 자료형
  • 메서드 오버로딩
    • 동일한 이름을 가지되, 매개변수의 개수와 자료형이 서로 다른 메서드를 같은 공간에 정의하는 것
  • 가변 길이 배열 데이터를 매개변수로 활용하는 메서드
    • 함수 선언 시 메서드명(자료형... 배열) 형태로 작성한다.

4-6. 클래스 구성요소

4-6-1. 내부 구성요소 - 생성자

  • 객체 생성에 사용하는 요소
  • 클래스의 필드를 초기화하기 위해 사용한다.
  • 클래스명과 동일한 이름을 가지며, 리턴 타입이 없다.

4-6-1-1. 기본 생성자

  • 생성자를 포함하지 않은 클래스에서 추가되는 생성자이다.
  • 컴파일러가 자동으로 생성한다.
  • 매개변수가 없고, 생성자 본문의 내용도 없다.
  • 생성자를 직접 만든 경우에는 추가되지 않는다.

4-6-1-2. this 키워드

  • 포함된 클래스의 객체를 가리키는 참조변수이다.
  • 해당 객체의 값을 그대로 사용할 때 필요하다.
  • 일반적으로 생략해도 컴파일러가 자동으로 추가한다.

4-6-1-3. this() 메서드

  • 자신이 속한 클래스 내부의 다른 생성자를 호출하는 메서드이다.
  • 반드시 생성자 내부에서, 생성자의 첫 줄로 사용해야 한다.
  • 생성자 오버로딩을 지원하기 때문에, 생성자를 여러 개 만들 때 사용한다.
  • 생성자를 사용하는 메서드 정의 시에는 사용할 수 없다.

4-6-2. 외부 구성요소 - 패키지

4-6-2-1. 목적

  • 동일한 목적의 클래스를 묶어서 관리하는 것
  • 클래스명의 충돌을 방지하기 위해 사용한다.

4-6-2-2. 이름 명명법

  • 도메인을 거꾸로 뒤집은 형태로 사용한다.
  • 클래스 호출 시 패키지명.클래스명 형태로 사용한다.

4-6-3. 외부 클래스

  • public 클래스 외부에서 정의한 클래스
  • 외부 클래스는 default 접근 지정자를 가지므로, 같은 패키지 내부에서만 사용할 수 있다.

4-6-4. 접근 지정자

4-6-4-1. 정의 및 사용 방법

  • Java의 제어자 중 하나이다.
  • 사용 범위를 정의하기 위해 사용한다.
  • 클래스, 멤버(필드, 메서드, 이너 클래스), 생성자 앞에 작성한다.

4-6-4-2. 종류

  • public: 동일 패키지와 다른 패키지의 모든 클래스
  • protected: 동일 패키지의 모든 클래스와 다른 패키지의 자식 클래스
  • default: 동일 패키지의 모든 클래스
  • private: 동일 클래스

4-6-4-3. 클래스에서의 접근 지정자

  • 클래스의 접근 지정자는 public과 default만 존재한다.
  • 외부 클래스는 default 지정자를 가지기 때문에 동일 패키지에서만 사용할 수 있다.

4-6-5. static 제어자

4-6-5-1. 정의

  • 클래스 멤버(필드, 메서드, 이너 클래스)에 사용하는 제어자
  • static 제어자가 붙어있다면 정적 멤버라고 하며, 객체 생성없이 클래스명.멤버명으로 사용할 수 있다.
  • static 제어자가 없다면 인스턴스 멤버라고 하며, 객체를 생성해사 사용한다.
  • static 제어자가 붙는다면 객체에서의 고유 변수의 성격을 가진다.

4-6-5-2. static 변수의 값 변화

  • static 변수의 값이 바뀐다면, 이후에 해당 변수를 호출한다면 변경된 값이 호출된다.
  • 이는 static 변수는 여러 번 호출해도 항상 하나의 주소를 가리키기 때문이다.

4-6-5-3. 주의사항

  • 정적 메서드 내에서는 정적 필드와 정적 메서드만 사용할 수 있다.
  • this 키워드를 사용할 수 없다.
  • 정적 필드를 초기화하기 위해서는 정적 초기화 블록을 사용해야 한다.
	static {
		초기화 내용
	}



참고 자료 및 출처

0개의 댓글