IT 성장 일기

22.02.04-java_유효범위/Overload(오버로드)/Constructor(생성자) 본문

IT 학습 노트/Java

22.02.04-java_유효범위/Overload(오버로드)/Constructor(생성자)

통통배 노아 2022. 2. 5. 16:37

1.유효범위

프로그램이 커지면 여러이유로 이름이 충돌하게된다. 이를 해결하기 위한 것이 유효범위라는 개념이다.

스코프(Scope)라고도 한다.

메소드 안에서 변수를 선언하게 될 경우 해당 변수는 메소드 안에서만 사용할 수 있는(유효한) 변수가 된다.

 

전역변수(global variables)

-변수가 클래스 바로 밑에 선언된 변수. 클래스 내의 모든 메소드와 for문 등 모든 중괄호{ }안에서 접근할 수 있는 전역변수가 된다.

지역변수(local variables)

-메소드 안에서 선언된 변수. 중괄호 밖에서는 유효x. 전역보다 지역변수의 우선순위가 더 높다

 

정적인 유효범위(Static Scope )

어떤 메소드의 유효범위가 자기자신이거나 전역을 사용하는 고정된 형태의 유효범위

동적인 유효범위(dynamic Scope)

어떤 메소드를 호출한 다른 메소드가 갖고 있는 변수의 값이 쓰이는 것.

 

this

인스턴스 자신을 의미하는 값. 해당 객체에 대한 전역의 의미를 갖는다.

 

앞서 말했듯이 지역변수가 더 우선시 된다. 위의 예시에서 m( )이라는 함수 안에서 지역변수 int v=20으로 선언 되어있다. 그냥 v를 출력하면 지역 변수 값이 20이 출력된다. this.v로 지역변수가 선언된 함수 안에서 전역변수를 사용할 수 있다.

 

 

2.오버로딩(Overloading)

 자바의 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메소드를 정의할 수 있다.

 

 

오버로딩의 조건

메소드의 이름이 같고, 매개변수의 개수나 타입이 달라야 한다. 주의할 점은 '리턴 값만' 다른 것은 오버로딩을 할 수 없다.

 

 

오버로딩을 사용하는 이유

1. 같은 기능을 하는 메소드를 하나의 이름으로 사용할 수 있다.

 다양한 타입의 매개변수들을 집어넣어도 우리는 그 함수들이 어떻게 실행되지는 모르지만 콘솔창에 아주 잘 출력해주는 것을 볼 수 있다.

 

2. 메소드의 이름을 절약할 수 있다.

 

 

 

3.생성자(Constructor)

초기화와 생성자

어떤 일을 시작하기 전에 준비를 하게 된다. 이것을 다른 말로 초기화라고 한다.

객체 지향 프로그래밍도 초기화에 해당하는 기능이 제공되는데 이것을 생성자(constructor)라고 한다.

문법: 접근지정자 클래스명(){ } -->클래스와 동일한 이름의 메소드를 선언한다.

 

생성자의 역할

클래스가 생성될 때 자동으로 클래스와 똑같은 이름을 가진 생성자가 실행되도록 약속되어있다.

그리고 이 생성자가 그 어떤 메소드보다 더 먼저 실행되도록 약속되어있다.

따라서 클래스와 동명의 메소드를 정의해서 로직을 채워넣게 되면 해당 로직은 어떠한 메소드보다 먼저 실행돼서 그 객체가 해야 할 일, 초기화 작업을 할 수 있도록 해준다.