1. 매소드
객체 지향 언어 : 하나의 사물을 하나의 클래스로 설명하는 언어
사물에 대한 설명은 그 물체의 상태와 행동으로 나눔
| 필드(feild) | 메소드(Method) |
| 물체의 상태 | 물체의 행동 |
| 차의 이름과 번호 | 차가 전진, 후진, 정차 하는 것 |
메소드 : 함수와 유사
클래스가 가지고 있는 기능이므로 클래스 안에 선언됨.
입력값 (매개변수, 인자) → 작동 → 결과값(리턴)
- 매개변수(parameter) : 전달된 인자를 받아들이는 변수
- 인자 (Argument) : 어떤 함수를 호출시에 전달되는 값
2. 메소드 선언
매소드 : 클래스가 가지고 있는 기능이므로 클래스 안에 선언됨.
public 리턴타입 메소드명 (매개변수들){
// 필요 기능들 넣기
}
메소드들은 리턴 타입의 유무나 매개변수의 유무에 따라 다양하게 정의 가능함
![]() |
들어오는 것(매개변수)도 나가는 것(리턴)도 없는 |
public void (==리턴 타입이 없다) 메소드명 (빈칸) { // 수행할 동작 } |
![]() |
정수를 매개변수로 받아서 리턴하지 않는 |
public void (==리턴 타입이 없다) 메소드명 ( int x ) { // 수행할 동작 } |
![]() |
아무것도 받지 않았지만 값을 리턴하는 |
public int (<==리턴타입) 메소드명 (빈칸) { // 수행할 동작 return 리턴타입과 동일한 타입의 변수; // 리턴해야하면 반드시 리턴 실행 } |
![]() |
정수 두개 받아들이고 리턴은 하지 않는 |
public void (==리턴 타입이 없다) 메소드명 (int x, int y) { // 수행할 동작 } |
![]() |
정소를 매개변수로 받아서 정수를 리턴하는 |
p public int (<==리턴타입) 메소드명 (int y) { // 수행할 동작 return 리턴타입과 동일한 타입의 변수; // 리턴해야하면 반드시 리턴 실행 } |
** 리턴ㅠ값이 없을 경우 void
** 리턴 값이 있을 경우
- 리턴타입은 하나만 사용할 수 있다. 리턴하는 타입은 어떤 타입이라도 상관없다.
** 받아들이는 값은 어떤 값이든 상관 없으며, 개수도 무관함.
여러개를 받을 경우 콤마(,)로 구분한다.
3. 메소드 사용
자바는 객체지향형 언어라 모든 메소드가 반드시 클래스 안에 속해있어야함.
클래스가 가진 메소드를 사용하기 위해서는 반드시 그 클래스가 객체로 만들어져야지만 사용 가능함.
클래스 변수명 = new 클래스();
변수명.매소드();
// 이걸 하면 클래스 내의 메소드가 실행됨
- 메소드를 사용하기 위해서는 메소드가 정의된 클래스가 생성되어야 한다
- 객체를 생성할 때는 new 연산자를 이용한다.
- 메소드 사용할때는 생성된 클래스를 참조하는 레퍼런스변수.메소드명() 으로 사용할 수 있다.
- 리턴값이 있는 메소드를 사용할 때는 변수타입 변수명 = new 클래스(메개변수 or 공백); 을 사용해 return값을 받아줄 변수를 만들어야한다
4. String 클래스의 메소드
자바에도 이미 만들어진 클래스가 많이 있음.
클래스를 만드는 것 or 기존의 클래스를 활용하는 것 : 걔네가 가진 기능을 사용하기 위함
String Class가 제공하는 메소드 이용하기
** String Class는 불변 클래스로, 메소드가 수행되면, 새로운 문자열을 만든다. 그러므로, 원래 클래스는 변하지 않는다.
| 문자열 길이 구하기 | str이 참조하는 문자열의 길이를 구해서 int 타입으로 리턴해주는 메소드 | str.length() |
| 문자열 붙히기 | str이 참조하는 문자열에다가 메소드의 인자로 들어온 문자열(str2)을 붙혀서 String 타입으로 리턴하는 메소드 |
str.concat(str2) |
| 문자열 자르기 | str.subString(1,3) 은 str이 참조하는 문자열을 인덱스 1번부터 3번까지 자른 결과 str.subString(2) 은 str이 참조하는 문자열을 2번 인덱스부터 마지막까지 자른 결과 |
str.substring(정수) |
5. 변수의 scope와 static
스코프 (scope) : 프로그램상에서 사용되는 변수들은 사용 가능한 범위
변수가 선언된 블럭이 그 변수의 사용범위이다.
public class ValableScopeExam{
int globalScope = 10; // 인스턴스 변수
public void scopeTest(int value){
int localScope = 10;
System.out.println(globalScope);
System.out.println(localScpe);
System.out.println(value);
}
}
- 클래스의 속성으로 선언된 변수 globalScope 의 사용 범위는 클래스 전체 이다.
- 매개변수로 선언된 int value 는 블럭 바깥에 존재하기는 하지만, 메서드 선언부에 존재하므로 사용범위는 해당 메소드 블럭내이다.
- 메소드 블럭내에서 선언된 localScope 변수의 사용범위는 메소드 블럭내이다.
main메소드에서 사용하기
- 같은 클래스 안에 있는데 globalScope 변수를 사용 할 수 없다.
- main은 static한 메소드이다. static한 메서드에서는 static 하지 않은 필드를 사용 할 수 없다.
public class VariableScopeExam {
int globalScope = 10;
public void scopeTest(int value){
int localScope = 20;
System.out.println(globalScope);
System.out.println(localScope);
System.out.println(value);
}
public static void main(String[] args) {
System.out.println(globalScope); //오류
System.out.println(localScope); //오류
System.out.println(value); //오류
}
}
static
- 같은 클래스 내에 있음에도 해당 변수들을 사용할 수 없다.
- main 메소드는 static 이라는 키워드로 메소드가 정의되어 있다. 이런 메서드를 static 한 메소드 라고 한다.
- static한 필드(필드 앞에 static 키워드를 붙힘)나, static한 메소드는 Class가 인스턴스화 되지 않아도 사용할 수 있다.
public class VariableScopeExam {
int globalScope = 10;
static int staticVal = 7;
public void scopeTest(int value){
int localScope = 20;
}
public static void main(String[] args) {
System.out.println(staticVal); //사용가능
}
}
- static한 변수는 공유된다.
- static하게 선언된 변수는 값을 저장할 수 있는 공간이 하나만 생성된다.
- 그러므로, 인스턴스가 여러개 생성되도 static한 변수는 하나다.
ValableScopeExam v1 = new ValableScopeExam();
ValableScopeExam v2 = new ValableScopeExam();
v1.golbalScope = 20;
v2.golbalScope = 30;
System.out.println(v1.golbalScope); //20 이 출력된다.
System.out.println(v2.golbalScope); //30이 출력된다.
v1.staticVal = 10;
v2.staticVal = 20;
System.out.println(v1.statVal); //20 이 출력된다.
System.out.println(v2.statVal); //20 이 출력된다.
- golbalScope같은 변수(필드)는 인스턴스가 생성될때 생성되기때문에 인스턴스 변수라고 한다.
- staticVal같은 static한 필드를 클래스 변수라고 한다.
- 클래스 변수는 레퍼런스.변수명 하고 사용하기 보다는 클래스명.변수명 으로 사용하는것이 더 바람직.
인스턴스 변수는 VariableScopeExam을 생성할 때 변수를 저장할 공간을 생성함.
== 할 때마다 그 객체안에 그 변수를 저장할 수 있는 공간을 새롭게 생성함
스태틱한 변수는 값 생성 공간이 하나밖에 없어서 값을 공유함.
클래스 변수 = static한 변수, 값을 저장할 수 있는 공간이 하나밖에 없어서 값을 공유함
== 클래스 이름.클래스 변수명 으로 접근 해서 사용
6. 열거형 (enum)
자바는 열거 타입을 이용하여 변수를 선언할 떄 변수 타입으로 사용할 수 있음.
- 열거형은 JDK5에서 추가되었다.
- JDK5 이전에는 상수를 열거형 대신 사용
- 상수를 이용하는 방법
public class EnumExam {
public static final String MALE = "MALE";
public static final String FEMALE = "FEMALE";
public static void main(String[] args) {
String gender1;
gender1 = EnumExam.MALE;
gender1 = EnumExam.FEMALE;
}
}
상수를 사용했을 때의 문제점
- String으로 선언된 gender1 에는 MALE,FEMALE 둘 중 한가지 값을 갖기 원하는데, gender1의 type이 String 이기 때문에 gender1 = "소년"; 이렇게 수행 되어도 전혀 문제가 되지 않는다.
- 실행할때 원했던 값인 MALE,FEMALE 이 아닌 다른 값이 들어오게 되므로 문제를 발생시킬 수 있다.
!!! 열거형을 사용하면 이런 오류를 없앨 수 있음.
- 열거형 정의 방법
enum Gender{
MALE, FEMALE;
}
- 열거형 사용 방법
Gender gender2;
gender2 = Gender.MALE;
gender2 = Gender.FEMALE;
//Gender타입의 변수에는 MALE이나 FEMALE만 대입이 가능. 다른 값은 저장할 수가 없다.
=> 특정 값만 가져야 한다면 열거형을 사용하는 것이 좋다.
'Java > 기초 공부' 카테고리의 다른 글
| 상속(1) - 상속, 접근제한자, 추상클래스 (0) | 2025.11.20 |
|---|---|
| 클래스 다듬기 - 생성자, this, 오버로딩, 패키지 (0) | 2025.11.20 |
| 클래스와 객체(1) (0) | 2025.11.19 |
| 배열 (0) | 2025.11.18 |
| 제어문 - 반복문 (0) | 2025.11.17 |




