Java 기초 문법 요약

honeyricecake·2022년 3월 18일
0

학교 수업 - 자바

목록 보기
1/16
post-thumbnail

1.
자바에서 하나의 프로젝트에서 처음으로 실행되는 부분을 Main함수 또는 Main 메소드라 한다.

public class Main
{
	public static void main(String[] args)// 메인 함수
    {
    	System.out.println("Hello World!");
    }
}

println은 괄호에 들어가는 내용을 출력한 뒤에 한칸 줄바꿈을 하는 함수이다.

2.
변수는 프로그램이 실행되는 동안에 언제든 저장된 값이 변경될 수 있는 공간
상수는 변경할 필요가 없는 데이터이다.

Tip.
Error occured during initialization if boot lauyer
이 오류는 Module-Info.Java로 인해 일어나는 오류이다.
Module-Info.Java를 Don't create 혹은 create한 후 직접 삭제하면 해결된다.

public calss Main
{
	public static void main(String[] args)
    {
    	int intType = 100;
        double doubleType = 150.5;
        String stringType = "honeyricecake";
	}
}

여기서 int, double, String은 자료형
그 옆의 intType, doubleType, StringType 은 변수명을 의미한다.

그리고 다음과 같이 final 키워드를 활용해 상수를 정의할 수 있다.

public class Main
{
	final static double PI = 3.141592;
    
    public static void main(String[] args)
    {
    //생략
    }
}

위에서 final 은 한번 선언되면 바꿀 수 없다는 의미이고
static 은 하나의 클래스에서 공유되는 자원이라는 의미이다.

3. 자바의 출력, 자료형에 관한 팁

(1) System.out.println("a + b = " + (a + b));
이 때 a = 1, b = 2이면 이는 다음과 같이 출력된다.

a + b = 3

즉 자바에서 print에 이용되는 +는 앞의 것을 출력하고 뒤의 것을 출력한다는 의미다.

(2) 정수 변수 안에 실수를 넣으면 정수 부분만 변수에 저장된다.

이를 이용하여 실수 값의 반올림은 변수에 0.5를 더한 뒤 정수형으로 형변환을 하면 된다.

ex.

double x = 2.5;
int y = (int)(x + 0.5);

System.out.println(y);

출력되는 값은 3이다.

4. 자바의 자료형

String, Array, boolean, char, int, double 등이 자주 사용되는데

이 중 C언어와 두드러지는 차이점은 바로 boolean형과 String형이다.

public calss Main
{
	public static void main(String[] args)
    {
    	int a = 100;
        
        System.out.println("10진수 : " + a);
        System.out.format("8진수 : %o\n", a);
        System.out.format("16진수 : %x\n", a);
    }
}

자바는 기본적으로 정수를 출력할 때 10진수로 출력한다.
따라서 정수를 10진수가 아닌 8진수, 16진수로 출력하고 싶다면 format을 이용하여야 한다.

딘 format으로 format을 받아출력할 때는 개행문자(줄바꿈)가 자동으로 들어가지 않으므로 마지막에 직접 넣어줘야한다.

String은 내부적으로 class라는 것을 이용해 구현되어 있다.
그래서 String자료형에 대하여 정의된 함수들이 많은데 그 중 substring이라는 함수를 이용해 String자료형에 대하여 정의된 함수들의 사용법을 알아보자.

public calss Main
{
	public static void main(String[] args)
    {
    	String name = "Jane Doe";
        System.out.println(name);
        System.out.println(name.substring(0,1));
        System.out.println(name.substring(3,6));
    }
}

substring은 String의 부분문자열을 가져오는 함수인데
이 때 (3,6)등의 괄호는 3이상 6미만이라고 생각하면 된다.
즉, String의 3번째 칸부터 5번째 칸까지를 가져온다.

따라서 위의 main함수는 다음과 같은 결과값을 출력한다.

Jane Doe
J
e D

자료형들의 크기

int - 4바이트
long - 8바이트
float - 4바이트
double - 8바이트
boolean - X
char - 2바이트(C언어는 1바이트인데 이는 유니코드를 쓰기 때문이다.따라서 한글도 사용 가능)

5. 연산자

  • : 더하기
  • : 빼기
  • : 곱하기
    / : 나누기 (몫만)
    % : 나머지

x++ : 1을 더하는 연산자, 다음 줄부터 x는 원래 값에 1이 더해짐
++X : 1을 더하는 연산자, 해당줄부터 x는 1이 더해져있다.

예시

public class Main
{
	public static void main(String[] args)
    {
    	int a = 40;
        System.out.println("a는" + a + "입니다.");
        System.out.println("a는" + a++ + "입니다.");
        System.out.println("a는" + a + "입니다.");
        System.out.println("a는" + ++a + "입니다.");
        a++;
        System.out.println("a는" + a + "입니다.");
    }
}

이는 순서대로 40 40 41 42 43 이 출력된다.

? : 삼항 연산자

~ ? a : b 는 ~가 참이면 a를 리턴, 거짓이면 b를 리턴한다.

6.조건문

public class Main
{
	public static void main(String[] args)
    {
    	String a = "I Love You";
        if(a.contains("Love")
        {
        	System.out.println("Me too.");
        }
        else
        {
        	System.out.println("I hate you");
        }
    }
}

String 이 내부적으로 가지고 있는 함수 contains, 어떤 문자열을 포함하고 있는지 검사하는 함수이다.

public class Main
{
	public static void main(String[] args)
    {
    	string a = "Man";
        
        if(a.equals("Man"))
        {
        	System.out.println("남자입니다.");
        }
        else
        {
        	System.out.println("남자가 아닙니다.");
        }
    }
}

자바는 String을 비교할 때 equals()를 이용한다.//즉, == 사용불가!
그 이유는 Strign은 다른 자료형과 다른 비원시 자료형인 문자열 자료형이기 때문이다.

equalsIgnoreCase를 이용해 대소문자를 무시하고 같은지 아닌지를 판단할 수도 있다.

하나의 비교 연산자는 boolean형 연산자 true 또는 false를 반환하게 된다.

for(;;;) while(true)는 무한반복
단, break문을 통해 빠져나올 수 있다.

7. 기본 입출력

import java.util.Scanner;//스캐너라는 걸 import해야만 scanner를 이용가능, 마치 C언어의 헤더파일과 같은 역할

public class Main
{
	public static void main(String[] args)
    {
    	Scanner sc = new Scanner (System.in);
        int i = sc.nextInt();
        System.out.println(i);
		sc.close;     
    }
}

sc는 함수가 아니라 인스턴스이다.
scanner 클래스의 인스턴스인 sc를 만들고 new Scanner(System.in)으로 초기화한다.
System.in은 콘솔창을 의미한다.

sc.nextInt를 통해 콘솔창에 입력되는 다음 정수를 입력받아 i에 넣어준다.

문자열 입출력 방법 :
1. next() : String형의 문자열을 입력받는다. 이 때 공백문자까지 입력받는다.
2. nextline() : 문자열을 입력받는데 다른 next~() 메소드와 다른 점은 줄단위로 입력받는다는 것이다.

8. 파일 입출력

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Main
{
	public static void main(String[] args)
    {
    	File file = new FIle("input.txt");
        
        try//아래의 문을 실행한다는 의미
        {
        	Scanner sc = new Scanner(file);//scanner 대신 file
            while(sc.hasNextInt())
            {
            	System.out.println(sc.nextInt() * 100);
            }
            sc.close;
        }
        catch (FileNotFoundException e)//FileNotFoundException 이라는 오류가 발생하면 중괄호로 들어간다.
    	{
    		System.out.println("파일 못 찾음");
    	}
    }   
}

기본 입출력 팁

  • 자바에서는 Scanner 클래스만 잘 활용해도 다양한 입출력 형태를 자유자재로 구사할 수 있다.

  • 주석은 최대한 많이 작성하는 습관을 들이자.

8. 사용자 정의 함수

-> 하나의 문제를 잘게 분해 가능 (효율성이 증가한다.)

함수는 각각의 모듈로서 쉽게 수정되고 보완된다.
(자바에서 함수와 Method는 같은 의미)

import java.util.Scanner;

public class Main
{
	public static int fuction(int a, int vb, int c)
    {
    	int min;
        
        if(a > b)
        {
        	if(b > c) min = c;
            else min = b;
        }
        else
        {
        	if(a > c) min = c;
            else min = a;
        }
        
        for(int i = min; i > 0; i--)
        {
        	if((a % i == 0) && (b % i == 0) && (c % i == 0)) return i;
        }
        return 0;
    }
    
    public static void main(String[] args)
    {
    	//중략
    }
}

위와 같이 사용자 정의함수를 만들 수 있다.

(위의 함수는 최대 공약수를 구하는 함수이다.)

다른 예시

import java.util.Scanner;

public Class Main
{
	public static char fuction(String input)
    {
    	return input.charAt(input.length() - 1);
    }
}

//생략

위의 사용자 정의함수를 이용하여 문자열의 마지막 글자를 출력할 수 있다.

charAt은 String에 정의되어 있는 함수로서 그 위치의 글자를 return하고
length 역시 String에 정의되어 있는 함수로서 그 문자열의 길이를 return한다.

Tip.
next -> 한 단어씩, 개행문자 무시 -> scanf와 같으나 개행문자를 버퍼에 남겨둔다는게 차이
nextline -> 한줄단위, 개행문자 받음

9. 배열

int[] array = new int[100];

이 때 new는 어떠한 변수(instance)를 만들 때 사용하는 하나의 약속이다.

C언어와 다르게 다음과 같이 선언 가능하다.

int x = 100;
int[] array = new int[x];

C언어는 다음과 같이 변수를 이용하여 배열을 할당하려면 malloc등의 동적할당을 활용해야 한다.

10. 클래스

클래스 - 현실 세계의 특정한 물건을 지칭한다고 생각하면 편하다.

ex. Node클래스 : 하나의 장소나 위치를 의미할 수도 있으며, 자료구조에서 말하는 이진 트리의 하나의 서브 트리가 될 수도 있다.

또한 개발 프로젝트에서는 종종 Student 클래스와 같이 하나의 처리할 데이터 단위를 명시하는데 사용된다.

ex.
car 클래스 - 속력, 색상, 이름 등등
이렇게 만들고 나면 new car(); 로 새로운 차 변수를 만들 수 있다.

이를 객체 지향 프로그래밍이라 한다.

예시

public class Node
{
	private int x;
    private int y;//노드의 특성 x,y
    //private으로 만드는 이유 - 외부에서 한번에 접근할 수 없음->자바의 객체지향 프로그래밍은 보안을 굉장히 중요시한다.
    
    public int getX()
    {
    	return x;
    }
    
    public void setX()
    {
    	this.x = x;//변수명이 겹치므로 this를 이용해준다. this는 클래스의 특성 x를 의미
    }
    
    public int getY()
    {
    	return y;
    }
    
    public void setY(int y)
    {
    	this.y = y;
    }
    
    public Node(int x, int y)//생성자, 객체를 하나 만즐어줄 때 자동으로 초기화해주는 함수
    {
    	this.x = x;
        this.y = y;
    }//클래스와 동일한 이름을 가지고 있다는 것이 생성자의 특징이다.
    
    public Node getCenter(Node other)
    {
    	return new Node((this.x + other.getX()) / 2 , (this.y + other.getY) / 2);
    }
}

이런 식으로 만들고 나서 Main에서 활용할 수 있다.

0개의 댓글