[Java] 기본 문법

ref-inflearn 김영한, 실전 자바 - 기본편

📌배열(Array)

✅배열을 왜 사용할까?

  • 배열을 사용하지않고 학생의 점수를 출력하는 간단한 프로그램을 만들떄.
package array;
 public class Array1 {
    public static void main(String[] args) {
        int student1 = 90;
        int student2 = 80;
        int student3 = 70;
        int student4 = 60;
        int student5 = 50;
        System.out.println("학생1 점수: " + student1);
        System.out.println("학생2 점수: " + student2);
        System.out.println("학생3 점수: " + student3);
        System.out.println("학생4 점수: " + student4);
        System.out.println("학생5 점수: " + student5);

변수를 선언하는부분에서 중복 코드가 발생한다. 만약 학생들이 많지않다면 문제가 되지않지만, 100명 10000명 이상의 학생들이 있다고 가정하면 증감에 따라 int 형 변수를 계속 증가시켜 줘야한다.

  • 배열을 사용한 코드.

   public static void main(String[] args) {

      int[] students = {90,80,70,60,50};

      int total = 0;

        for (int i = 0; i < students.length; i++) {
            total += students[i];
        }
        double average = (double) total/5;
        System.out.println("점수 총합:" + total);
        System.out.println("점수 평균:"+ average);
        }

배열을 사용한다면 int 형 배열 변수를 한개만 선언 하고 그안에 배열 인덱스 안에 값을 넣을수있는 편리함이있다.

✅배열 사용법

변수선언 image description

  1. 배열을 사용하려면 기존 변수 선언 부에서 [] 기호만 추가해주면된다. ex) int[] students; 배열 변수만 선언한다고 해서 배열을 사용할수 있지는 않다. 배열 변수는 단지 배열의 참조값을 보관하고 있는 변수이다.
    참조값을 통해 메모리에 있는 실제 배열에 접근하고 사용할 수 있다.

✅기본형 vs 참조형

자바 변수 데이터 타입을 가장 크게 보면 기본형,참조형으로 나눌수있다.

  • 기본형(Primitive Type) int,long,double,boolean 처럼 변수에 사용할 값을 직접 넣을 수 있는 데이터 타입을 기본형이라고 한다.
  • 참조형(Reference Type)데이터에 접근하기 위한 참조(주소)를 저장하는 데이터 타입을 참조형 이라고한다. 객체나 클래스를 담을 수 있는 변수들도 모두 참조형이다.

📌메서드(Method)

✅메서드란?

메서드는 특정 작업을 수행하는 일련의 문장들을 하나로 묶은것이며어떠한 값을 입력하면 이 값으로 작업을 수행한다.

✅메서드 사용이유

## 1. (매서드를 사용하기전 더하는 코드)
 int a = 1;
 int b = 2;
 System.out.println(a + "+" + b + " 연산 수행");
 int sum1 = a + b
## 2.
 int x = 10;
 int y = 20;
 System.out.println(x + "+" + y + " 연산 수행");
 int sum2 = x + y;

-------------------------- 메서드 사용후()
 int sum1 =add(1,2);
 System.out.println("결과1 출력:" + sum1);
 int sum2 =add(15,20);
 System.out.println("결과2 출력:" + sum2);
----------------------------------------
public static int add(int a , int b,){
    sum = a+b;
    return sum;
    //메서드를 만들어놓고 메인메서드에서 호출만 하면 위에 코드랑 동일한 결과를 얻어 낼수있다.
}
  1. 높은 재사용성
    한번 만들어놓은 메서드는 몇번이고 호출할수있으며 , 다른프로그램에서도 사용가능.

  2. 중복 코드의 제거
    위에 코드를 보면 더하기를 하는 반복되는 연산을 수행하는것을 하나의 메서드로 작성해놓으면 중복코드를 제거할수 있기떄문이다. -> 같은 내용의 문장들이 반복되면 소스코드드 길이도 길어지고,변경 사항시 여려곳을 고쳐야 하므로 유지보수 작업이 매우힘듬.

  3. 프로그램 구조화
    큰 규모의 프로그램에서는 코드 양이 많기떄문에 main 메서드 안에 모든 문장을 떄려박을 수업으므로 문장들을 작업 단위로 나눠서 여러개의 메서드에 담아 프로그램을 단순화 시키는것이 필수적이다. 즉 -> main 메서드는 프로그램 전체 흐름이 한눈에 들어올정도로 단순하게 구조화 하는것이 좋다.그래야 나중에 버그가 생겨도 해당 부분을 쉽게 찾아 해결가능.



✅메서드 정의

public static int add(int a, int b)1 //<메서드 선언부분  { 
 System.out.println(a + "+" + b + " 연산 수행"); 2
 int sum = a + b;                   3           //메서드 본문
 return sum;                        4
 }

메서드는 크게 메서드 선언과 메서드 본문으로 나눈다.

  • 메서드 선언
    public static int add(int a,int b) 1 번 부분은 메서드의 선언 부분으로=> 메서드 이름,매개변수(파라미터) 목록을 포함한다. 이런 메서드가 있다고 선언하는것. 메서드 선언 정보를 통해 다른곳에서 해당 메서드를 호출할수있다. int ->반환 타입을 정의한다-> 메서드의 실행 결과를 반환할떄 사용할 반환타입을 지정;

  • 메서드 본문
    2,3,4번은 메서드 본문 부분이므로 메서드가 수행하는 코드블럭. 메서드 호출하면 메서드가 본문이 순서대로 실행.
    메서드 본문은 블랙박스이다. 메서드를 호출하는 곳에서 선언 부분은 알아야하지만 본문 부분은 모른다.
    메서드의 실행 결과를 반환하려면 반드시 return 문을 사용해야한다.

✅메서드 호출과 용어정리

메서드를 호출할떄는 다음과 같이 메서드에 넘기는 값과 매개변수(파라미터)의 타입이 맞아야하고, 넘기는 매개변수의 순서와 개수도 맞아야한다.

호출: call("hello", 20)
메서드 정의: int call(String str, int age)
  • 인수(Argument)
    “hello”,20 처럼 넘기는 값을 인수라고 한다.
  • 매개변수(Parameter)
    메서드를 정의할떄 선언한 변수의 String str,int age를 매개변수 파라미터라고 한다. 매서드를 호출할떄 인수를 넘기면 그 인수가 매개변수에 대입된다. 즉 - >메서드 호출부와 메서드 내부 사이에서 값을 전달하는 역활을 하는 변수라는 뜻이다.

✅메서드 오버로딩

  • 메서드 오버로딩을 사용하는 이유.
    두수를 더하는 메서드
    세수를 더하는 메서드

이러한 경우 둘다 더하는 메서드 이기떄문에 가급적 같은 이름인 add를 사용하고싶다. 자바는 메서드의 이름 뿐만 아니라 매개변수 정보를 함꼐 사용하여 메서드를 구분한다

  • 메서드 오버로딩 이란?
add(int a, int b)
add(int a, int b, int c)
add(double a, double b)

이렇게 메서드 이름이 같고 매개변수가 다른 메서드를 여러개 정의하는 것을 메서드 오버로딩 이라고 한다. 오버로딩=> 과적, 즉 과하게 물건을 담았다는 뜻으로. 같은 이름의 메서드를 여러개 정의했다고 이해하면된다.

  • 오버로딩 규칙 메서드 이름이 같아도 매개변수 타입 및 순서가 다르면 오버로딩을 할수있다. 반환타입은 상관없다. => 즉 메서드 이름이 같아야고 , 매개변수 개수 또는 타입이 달라야한다.
//오버로딩 실패 예시
int add(int a, int b)   //실패 이유는 타입이 똑같음
 double add(int a, int b)




📌클래스(Class)

✅클래스란?

클래스 정의: 클래스란 객체를 정의해 놓은것.
클래스 용도: 클래스는 객체를 생성하는데 사용함.

✅클래스 생성과 객체 생성

  • student 클래스 생성
package class1;
 public class Student {
 String name;//맴버변수
 int age;   //맴버변수        
 int grade; //맴버변수
 }

학생 클래스에 (name,age,grade) 라는 변수를 갖고 이러한 클래스에 정의한 변수들을 맴버변수,또는 필드라고 부름

  • Student 객체 생성

    Student클래스를 선언한 것은 설계도를 작성한 것에 불과하므로 studnet 객체를 생성해야 studnet를 사용가능하다.
클래스명(Studnet) 변수명(student1); // Student 클래스 타입의 객체를 참조하기 위한 참조변수 선언
변수명(student1) = new 클래스명(Studnet)(); // 클래스의 객체 생성후,객체의 주소를 참조변수에 저장

image description

new 키워드를 통해 메모리에 Students 객체가 생성되고.-> 객체를 생성되면 자바는 메모리에 어딘가 접근할수있는 참조값을 반환한다(x001).-> student1에 변수값에 객체의 참조값(x001)을 보관. stduents1 에 변수를 통해서 해당 객체에 접근은 할수있다.

참조값을 변수에 보관해야 하는이유 new student()는 그냥 메모리에 객체만 생성되고, 생성된 객체에 접근할 방법이없다. 그래서 우리가 해당 객체를 쓰기위해서 변수에 참조값을 반환받아,그변수를 통해서 해당 객체를 사용하는 식이다.

✅객체사용

 //객체 값 대입
student1.name = "학생1";  
 student1.age = 15;
 student1.grade = 90;

 //객체 값 사용
System.out.println("이름:" + student1.name + " 나이:" + student1.age + " 성적:" + 
student1.grade);

객체가 가지고있는 맴버변수 (name,age,grade)에 값을 대입하려면 먼저 객체에 접근해야함. 객체에 접근하려면 .(점) 키워드를 사용함.

✅클래스,객체,인스턴스 정리

클래스 - 객체를 생성하기위한 설계도 , 클래스는 객체가 가져야할 속성(변수)와 기능(메서드)로 정의한다. 클래스만 정의한다고 해서 실제 객체를 사용할수없음.

객체-Object 객체는 클래스에서 정의한 속성과 기능을 가진 실체.

인스턴스 - Instance 인스턴스는 특정 클래스로부터 생성된 객체를 의미한다. 객체,인스턴스 똑같은의미

Categories:

Updated:

Leave a comment