JAVA 공부

01- JAVA 기초&기본 개념 공부

hakstroy 2025. 3. 9. 13:41

 

 

※Java

 

**메소드(method())

 - 특정 기능을 수행하기 위한 코드 묶음

 

*메소드 구조

접근제어자 반환형 메소드명(전달값){
         명령문1;
         명령문2;
          ...
}
ex) public static void print(){
          sout("안녕");
      }
      public static void main(String[] args){
          print(); 메소드 호출 
      }


**전달값(Parameter)

 - 메소드 호출 시 전달하는 값

 

*메소드 구조

접근제어자 반환형 메소드명(전달값){
   명령문1
   명령문2
    ...
}
ex) public static void print(int a){ //전달값이 있는 메소드
            sout(a);
      }
public static void main(String[] args){
      int a = 3;
      print(a); 메소드 호출 
      print(5);
 }
public static void print(int a, int b){ //전달값이 있는 메소드
      sout(a + b);
 }
public static void main(String[] args){
      int a = 3;
      int b = 4;
      print(a,b); 메소드 호출 
      print(5,3); 메소드 호출 
}

**반환값 (return)

- 메소드 실행 결과를 반환

 

*메소드 구조
접근제어자 반환형 메소드명(){
      명령문1
      명령문2
        ...
      return 반환값;

ex)
public static - 접근제어자
int 반환형
getMaxLottoNumber - 메소드명
public static int getMaxLottoNumber(){
      return 45;
}
public static void main(String[] args){
      int num = getMaxLottoNumber(); // 호출
      sout(num); // 45로 나옴.
}


**전달값과 반환값

 - 전달값과 반환값이 있는 경우.

 

**메소드 구조
접근제어자 반환형 메소드명(전달값){
      명령문1
      명령문2
      ...
      return 반환값;
}
ex)
public static int add(int a, int b){
     return a+b;
}
public static void main(String[] args){
       int result = add(1,2)(전달값);
       sout("1+2=" + result(반환값);
}

**메소드 오버로딩

 - 같은 이름, 다른(개수,자료형) 매개변수

 

*메소드 구조

접근제어자 반환형 메소드명(정수 전달값){}
접근제어자 반환형 메소드명(정수 전달값1, 정수 전달값2){}
접근제어자 반환형 메소드명(실수 전달값){}

ex) 
전달값 2개
public static int add(int a, int b){
return a+b;
}
전달값 3개
public static int add(int a, int b, int c){
return a+b+c;
}
실수 전달값 2개
public static double add(double a, double b){
return a+b;
}
public static void main(String[] args){
sout(add(1,2));
sout(add(1,2,3));
sout(add(5.3,1.2));
}

**변수의 범위

- 변수가 유효한 영역(변수가 쓸 수 있는 영역)
ex) public static void scope(){
sout(a); // a 변수 사용 X

public static void main(String[] args){
int a = 10;  // 선언된 영역{} 내에서만 사용 가능 
sout(a)
;
public static void scope(){
int a = 10;  // 선언된 영역{} 내에서만 사용 가능 
sout(a); // a 

public static void main(String[] args){
sout(b) // 사용 불가.
}
public static void main(String[] args){
int c = 30;
if(c>10){
       int d = 40;
       sout(d); d = 40 // { } 선언된 영역 내에서만!
}
sout(d); 출력 X 
}


**클래스

- 데이터와 기능을 포함하는 코드 묶음이다.
  : 클래스에서 만들어진 결과물 - 객체라고 한다.
ex) 클래스 : 종이접기 책 , 객체 : 책을 보고 접은 종이학 
class 클래스명 { 
}
ex)
클래스
class Person{
}
객체 생성
public static void main(String[] args){
   Person person = new Person() // 객체 생성
}

**인스턴스 변수

 -  클래스 내에 선언된 변수
class 클래스명{
    인스턴스변수1
    인스턴스변수2
     ...
 }
ex)
class Person{
    String name; // 인스턴스 변수
    int age; // 인스턴스 변수
}
public static void main(String[] args){
Person person = new Person() // 객체 생성
// 인스턴스 변수 : 객체마다 서로 다른 값을 가질 수 있다.
person.name = "철수"; // 인스턴스 변수에 값을 지정 
person.age = 20;
}

**클래스 변수

- 클래스 내에 static으로 선언된 변수(쉽게 말해 모든 객체가 공유하는 변수)
class 클래스명{
    static 클래스 변수1
    static 클래스 변수2
    ...
}
ex)
class Person{
String name;
int age;
static int personCount = 0; // 클래스 변수
}
public static void main(String[] args){
Person.personCount = 10; // 객체 생성 없이 Person으로 바로 호출.
sout(Person.personCount);
}
**클래스 변수 : 객체를 만들 필요 없이 클래스 명으로 접근이 가능하다.

**인스턴스 메소드

- 클래스 내에 정의된 메소드
class 클래스명{
인스턴스 메소드1
인스턴스 메소드2
...
}
ex)
class Person{
String name;
int age;
static int personCount = 0; 
public void introduce(){ // 인스턴스 메소드
sout("이름 : " + name);
sout("나이 : " + age);
}
}
public static void main(String[] args){
Person person = new Person();
        person.name = "철수";
        person.age = 20;
        person.introduce(); // 메소드 호출;
** 점(.) 으로 인스턴스 변수 or 메소드에 접근이 가능.
}

**클래스 메소드

- 클래스 내에 static으로 정의된 메소드.
class 클래스명{
static 클래스 메소드1
static 클래스 메소드2
...
}
ex) 
class Person{
     String name;
     int age;
     static int personCount = 0; 
     public static void printPersonCount(){ // 클래스 메소드
           sout(personCount);
      }
}
public static void main(String[] args){
Person.personCount = 10;
Person.printPersonCount();
}

**This

- 자기 자신 의미 (인스턴스 / 지역 변수 구분)할때 사용
- this.인스턴스변수;
ex) 
class Person{
String name; 클래스 변수
public void setName(String name){ 
// 클래스 내의 변수와 메소드에 선언된 변수와 동일해서
this로 구분을 해준다.
this.name = name;
**this.name: 클래스 변수
** name: 메소드 변수  
}
}

**생성자

- 객체가 생성될 때 호출되는 메소드
클래스명(전달값){
초기화 명령문
}
ex)
class Person{
     String name;
     int age;
    // 생성자
   Person(String name, int age){
       // 초기화 작업 수행
       this.name = name;
       this.age = age;
    }
}
public static void main(String[] args){
      Person person = new Person("철수",20); // 객체가 생성될 때 호출하는(되는) 메소드!
}


**Getter와 Setter  
- Getter : 인스턴스 변수의 값 반환
반환형 get이름(){
    return 반환값;
}
ex)
class Person{
int age;
      public int getAge(){
           return age;
      } 
}
- Setter : 인스턴스 변수의 값 설정
void set이름(전달값){
}
ex) 
class Person{
int age;
public void setAge(int age){
this.age = age;

}

public static void main(String[] args){
Person person = new Person();
person.setAge(20); 값 설정하기(setter) 이용 방법 // 변수에 값을 설정! this.age = 20;
sout(person.getAge()); // 값가져오기 (getter) setter로 변수 설정한 값을 가져와서 출력 return 20;
}

**접근제어자

- 접근 권한 지정 (private, public, protected)
class 클래스명{
     인스턴스 변수
     인스턴스 메소드
}
ex)
class Person{
      int age;
      private int age; // 클래스 외부에서는 직접 접근 불가능
      public void setAge(int age){
      this.age = age;
     }
}

 

**접근제어자

- 접근 가능 범위
private : 해당 클래스 내에서만 사용 
public : 모든 클래스에서
default : 같은 패키지 내에서만(아무것도 적지 않았을 때)
protected : 같은 패키지 내에서, 다른 패키지인 경우 자식 클래스에서만

**패키지

- 서로 관련 클래스들을 그룹화(폴더) 한것
package 패키지명;
폴더구조
JavaWorkspace
.idea
out
src
sample
MyClass.java
package sample;
public class MyClass{

}
다른 패키지를 사용하기 위해서
import 패키지명.클래스명

import java.util.Random;
import java.util.*; 패키지 내 여러 클래스를 사용할 경우
public class MyClass{
public static void main(String[] args){
Random random = new Random();
int num = random.nextInt();
}
}