동석쿠
프로그래밍 공부
동석쿠
전체 방문자
오늘
어제
  • 공부 (80)
    • 공부기록 (64)
      • 웹개발 (6)
      • Java (7)
      • cs 공부 (3)
      • http 웹 기본 지식 (8)
      • 자바 스프링 (20)
      • 개인 미니프로젝트 (3)
      • 알고리즘 공부 (6)
      • 면접준비 (2)
      • 프론트공부 (8)
      • 파이썬 플라스크 (1)
    • 항해99 기록 (14)
      • 회고록 (10)
      • 팀프로젝트 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 상속
  • 리프레시토큰
  • 파이썬
  • 리액트
  • JPA
  • Java
  • 스프링
  • Post
  • 리프레쉬토큰
  • 알고리즘
  • Get
  • 리스트
  • 프로그래머스
  • 스프링부트
  • 자바스크립트
  • 항해99
  • 문법
  • 자바
  • API
  • lombok

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
동석쿠
공부기록/Java

Java문법 (변수와 상수)(자료형)(연산자)(조건문과반복문)

Java문법 (변수와 상수)(자료형)(연산자)(조건문과반복문)
공부기록/Java

Java문법 (변수와 상수)(자료형)(연산자)(조건문과반복문)

2022. 1. 5. 19:58

항해99를 시작하기에 앞서 항해99에서는 프런트(리액트), 백엔드(노드.js, 스프링) 셋 중 주특기를 선택해서 그것만 집중적으로 공부하게 된다. 나는 여기서 스프링을 고를 예정인데 스프링은 자바를 기반으로 하기 때문에 자바의 기초적인 문법들을 미리 공부하려 한다. 다행히도 웹 개발 종합 강의 이외에도 Java강의가 제공되기 때문에 이 강의를 보며 Java의 기초를 공부하려 한다.

 

우선 자바 언어의 특징에 대해 알아보면

 

Java는 제임스 고슬링과 연구원들이 개발한 객체 지향적 프로그래밍 언어다.

Write Once, Run Anywhere

직역을 하면, '한 번 작성하면 어디에서나 실행된다'는 의미다. 즉, 이것은 자바로 개발된 프로그램은 자바 실행 환경 JRE가 설치된 모든 환경에서 실행이 가능하다는 뜻이다.

-Java는 1995년 탄생한 이후로 꾸준히 축적된 노하우로 인해 안전성이 좋아 꾸준히 기업용 소프트웨어에서 기본 언어 및 환경으로 채택하고 있다.

-오랜기간 개발된 오픈소스 라이브러리가 많다. 다양한 사람들이 개발하고 공유하는 방대한 라이브러리를 사용하면 개발 시간을 단축할 수 있으며 안정적으로 프로그램을 만들 수 있다.

 

Java를 주로 사용하는 곳은

1. 백엔드 서버 개발

2. 데이터 엔지니어링

3. 하드웨어 실행환경에 구애받고 싶지 않은 모든 곳

 

그러나 Java는 예전에 정해진 문법 때문에, 더 유연하고 견고한 코드를 만들기 어려운 점이 있다.

이런 이유 때문에 전세계의 많은 개발자들이 자바를 대체하는 새로운 언어를 사용하며 개발하고 있는데,

배우기 쉬우면서도 자바의 단점을 극복한 언어 중 대표적인 것으로는 Kotlin, GoLang 등이 있다.

 

그럼에도 불구하고 자바를 배워야하는 이유는 있다.

-레퍼런스(인터넷 검색결과)가 매우 많아 가장 쉬운 객체지향 언어이고

-언어가 다르더라도 실행환경은 자바의 구동 환경인 JVM에서 동작하는 언어들이 많다(Scala, Kotlin 등) 

그렇기 때문에 Java를 익히면서 배우는 JVM에 대한 지식은 언어가 바뀌더라도 계속 유효하다.

-안전성이 중요한 기업용 소프트웨어, 대용량 데이터를 다루기 위한 도구들은 대부분 JVM, java기반으로 만들어져 있다.

오랜 시간 운영해야 하는 유지보수, 그동안 쌓인 노하우, 그리고 생태계 때문에 쉽게 java언어를 대체할 수 없다.

-위의 이유때문에 자연스럽게 취업시장에서도 수요가 많다. 여전히 국내에서는 Java 개발자를 구하는 곳이 많으며

특히 백엔드 개발자로 커리어를 생각하는 경우 대표적인 자바 프레임워크인 Spring이라는 프레임워크를 공부하는 데 있어 자바는 필수적인 언어다.

Java의 기초는 src->main->java->Java Class순서다.

class는 항상 main이 제일 먼저 실행되며 우리가 코드를 작성할 때에는 main 함수 안에 작성해주어야 한다.

public class Main {

    public static void main(String[] args) {
	// write your code here
        System.out.println("Hello Wolrd");
    }
}

이 코드를 입력하면 위의 사진처럼 Hello World가 출력되는 것을 확인할 수 있다. 

println 의 경우 출력 이후, 줄 바꿈(Enter)을 한다는 의미다.

 

Java 또한 다른 언어들과 마찬가지로 모든 코드들을 외울 수 없다. 다른 언어들처럼 무조건 다 외우는 것이 아닌 필요할 때에 생각해내어 검색하여 찾아내고 그 코드를 사용할 수 있을 정도로 공부하면 충분하리라 생각된다.

 

본격적으로 Java에 대해 배워보자. 가장 먼저 배울 것은 변수와 상수다. 

변수 : 어떠한 데이터를 저장하기 위한 메모리 공간의 이름. 지속적으로 변수의 값을 변경할 수 있다.

상수 : 중간에 값이 변할 수 없으며 초기값을 끝까지 사용해야 한다.

 

int num = 5; //정수형 변수 선언
System.out.println(num);

String sparta = "Hello Sparta!"; // 문자형 변수 선언
System.out.println(sparta);

sparta = "Goodbye Sparta"; // 이미 선언된 변수에 다른 값을 할당
System.out.println(sparta);
final int num2 = 10; // 상수형 변수 선언 (final로 선언 가능)
System.out.println(num2);
num2 = 50;

아래의 코드를 실행시켜보면 위와 다르게 오류가 발생한다. 그 이유는 상수는 처음 할당된 값을 끝까지 사용해야 하기 때문이다.

변수 sparta는 "Hello Sparta!" 라는 문자열이 할당돼있다가 다음 문단에서 "Goodbye Sparta"로 다른 문자열이 할당되고 이것이 문제없이 실행된다. 반면 상수 num2는 10이라는 값이 할당돼 있다가 50이란 값이 할당되는데 상수는 처음 할당된 값을 끝까지 사용해야 하기 때문에 오류가 발생한다.

 

변수를 선언할 때는 [접근제어자] [변수의 자료형] [변수의 이름] 의 방식을 이용하면 된다. 

변수 선언시 값도 함께 선언하고 싶다면 [변수의 자료형] [변수의 이름] = [값]의 방식을 이용하면 된다.

 

<변수의 이름을 붙이는 규칙>

Java에서는 CamelCase라는 규칙으로 이름을 선언하는 것을 defacto standard(사실상의 표준)으로 하고 있다.

첫 글자는 알파벳 소문자로, 그 이후에 단어의 단위마다 첫 글자만 대문자이고 나머지는 소문자인 단어를 붙여서 쓰는 방식이다

예를 들면 앞서 공부했던 파이썬의 경우 변수 Nintendo_Switch 였다면 자바에선 nintendoSwitch가 된다.

 

그다음으로 공부할 것은 자료형 이다

자료형에는 크게 숫자, 문자, 논리, 바이트가 있다. 

byte x = 1;
short s = 1;
int a = 3; // 정수형 변수 선언
long b = 1234567890L; // Long 정수형 변수 선언
float c = 5.5F; // float 실수형 변수 선언
double d = 9.12345678901234567890d; // double 실수형 변수 선언

숫자에서 주로 사용하는 것은 정수형에선 int형 실수형에선 float인데 만약 숫자가 더 커질 경우 long, double을 쓰면 된다.

char alphabet = 'A'; // 문자형 변수 선언

문자 char의 경우 단 한 글자만 선언할 수 있으므로 만약 문자가 AB로 두 글자 이상 되는 순간 오류가 발생한다

boolean fact = true; // 논리형 변수는 true, false의 값을 가진다.

논리형의 경우 true나 false의 값을 가지는데 이는 반복문 조건문 등에 많이 사용된다

byte data = 'd'; 
System.out.println(data); // 알파벳 d는 ASCII code 에서 십진법으로 100이기 때문에 100이라는 글자가 출력됩니다.

바이트를 변수로 선언할 수 있다. 컴퓨터에서 표현되는 모든 데이터는 사실상 바이트의 연속이다. 바이트를 직접 쓸 일은 별로 없겠지만, 바이트로 표현할 수 있다는 것만 알고 넘어가자.

 

Reference Type (참조 자료형)

자바에서 참조 자료형은 기본 자료형이 아닌 모든 것을 참조 자료형이라고 한다. 더 정확히는 참조 자료형이란 자바의 인스턴스를 가리킬 수 있는 자료형이다. 인스턴스가 무엇인지는 뒤에 <객체지향 언어> 단원에서 배운다고 한다.

String sparta = "sparta !!";
int[] intArray = new int[] {1,2,3,4,5}; // int 배열을 선언과 동시에 초기화

string의 경우 클래스를 이용한 참조 자료형이라고 하는데 string은 자바 개발자들이 미리 만들어놓은 코드다.

이렇게 String처럼 클래스로 정의된 타입은 전부 참조 자료형이라 할 수 있다.

배열 또한 참조 자료형이다.

 

연산자

연산자는 여러 변수들간의 계산 및 비교를 위하여 사용된다. 종류로는

산술연산자, 대입연산자, 논리연산자, 관계연산자 등이 있다.

int num1 = 10;
int num2 = 5; 

System.out.println(num1 + num2); // 더하기 연산 15
System.out.println(num1 - num2); // 빼기 연산 5
System.out.println(num1 * num2); // 곱하기 연산 50
System.out.println(num1 / num2); // 나누기 연산 2
System.out.println(num1 % num2); // 나머지 연산 0

산술연산자의 경우 기본 사칙연산과 추가로 나머지를 계산해주는 코드들이 있다. 

int num1 = 10;
int num2 = 5;

num1 += num2; // num1 = num1 + num2
System.out.println(num1);

num1 -= num2; // num1 = num1 - num2
System.out.println(num1);

num1 *= num2; // num1 = num1 * num2
System.out.println(num1);

num1 /= num2; // num1 = num1 / num2
System.out.println(num1);

num1 %= num2; // num1 = num1 % num2 
System.out.println(num1);

대입연산자의 경우 산술연산자를 계산한 후 대입해주는 코드다.

주의할 사항으로 계산을 한 후, 다음 계산을 할 때 num1과 num2 두 변수의 값은 이전의 계산에 의해 변해 있을 수 있다.

만약 원래 값인 10과 5를 사용하고 싶다면 값을 초기화 시켜줘야 한다.

int num1 = 10;
int num2 = 20;
int num3 = 10;

System.out.println(num1 > num2); // 10 > 20
System.out.println(num1 >= num3); // 10 >= 10
System.out.println(num1 < num2); // 10 < 20
System.out.println(num1 <= num2); // 10 <= 20
System.out.println(num1 == num3); // 10 == 10
System.out.println(num1 != num2); // 10 != 20

관계연산자. ==는 두 값이 같은지, !=는 두 값이 같지 않은지를 확인하는 연산자.

관계연산자는 결과값이 참이라면 true를 결과값으로 반환하고 결과값이 거짓이라면 false를 결과값으로 반환한다.

boolean a = true;
boolean b = false;

System.out.println(a && b);
// &&는 두가지 모두 참일 경우에는 true를, 그렇지 않을 경우에는 false를 반환합니다.
System.out.println(a || b);
// ||는 두가지 모두 거짓일 경우에는 false를, 그렇지 않을 경우에는 true를 반환합니다.
System.out.println(!b);
// !는 피연산자의 논리값을 바꿉니다. true는 false로 , false는 true로 반환합니다.

논리연산자도 또한 조건을 만족하는지에 따라 결과값으로 true와 false를 반환한다

 

조건문과 반복문

조건문과 반복문은 어떤 언어에서든 정말 유용하게 쓰이는 제어문이다.  조건문과 반복문에 대해 충분히 이해하고 활용해야 어떠한 코드를 설계하더라도 막힘없이 할 수 있을것이다.

 

조건문

만약 어떠한 특정 조건에 따라 프로그램이 실행되기를 바랄때 사용하는 방법

대표적으로 if, switch, 삼항연산자 조건문이 있다. 또한 if 조건문은 if~ else if로 활용할 수 도 있다.

if (조건식){
    실행 코드
}
int check = 100;
int num1 = 150;
if (num1 > check) {
    System.out.println("100보다 큰 수입니다");
} else {
    System.out.println("100보다 작은 수입니다.");
}

위 코드의 경우 if문의 활용 방법인데 num1(150)이 check(100)보다 크기때문에 "100보다 큰 수 입니다" 가

출력된다 만약 num1이 100보다 작았다면 else if로 넘어가 "100보다 작은 수입니다"가 출력 됐을것이다.

switch (입력 변수){
    case 입력값1 : 실행 구문
        break;
    case 입력값2 : 실행 구문
        break;
    case 입력값3 : 실행 구문
        break;
    default: 기본 실행 구문
        break;
}
char score = 'A';
switch (score) {
    case 'A':
        System.out.println("A등급입니다.");
        break;
    case 'B':
        System.out.println("B등급입니다.");
        break;
    case 'C':
        System.out.println("C등급입니다.");
        break;
    default:
        System.out.println("C등급보다 낮은 등급입니다.");
        break;
}

위 코드의 경우 switch문의 활용 방법인데 score가 A 이므로 "A등급입니다"가 출력된다.

 

Java에서는 한 문장의 끝에 세미콜론이 있어야 한다. 여기서도 break 이후에 세미콜론을 붙여저야 한다.

break를 하지 않을시, 다음 case코드 블럭도 같이 실행되니 조심해야한다.

<breeak는 해당하는 case의 코드를 실행 후, switch문 밖으로 나가게 해주는 역할을 한다. break문에 대해서는 반복문에서 다시 한 번 더 배울 예정이다.>

(조건식) ? A : B
int a = 5;

String reuslt = (a < 10) ? "10보다 작습니다." : "10보다 큽니다.";
System.out.println(reuslt);

if문, switch문 이외에도  심플하게 처리가능한 조건문이 있다. 바로 삼항연산자인데, 삼항연산자의 문법은

?를 기준으로 조건식이 true일 경우에는 A코드를 false일 경우에는 B 코드를 수행한다. 위의 경우 Strin result가

True이므로 A(왼쪽)인 "10보다 작습니다"가 출력된다

삼항연산자를 사용하면 if문이다 switch문보다 직관적이고 간결한 코드를 작성할 수 있다.

 

반복문

반복문에는 대표적으로 for문과 while문 그리고 do~while문이 있다.

for(초기값 ; 조건식 ; 증감식){
    실행 코드 블럭
}
int sum = 0;

for (int i = 0; i < 10; i++) {
    sum += (i + 1);
}
System.out.println(sum);

위 코드의 경우 1부터 10까지의 합을 구하는 예제다. 변수 i는 1부터 10까지 변할 때까지 1씩  더해지는데 i가 증감식에 의해 11이 되면 조건문에 위배되기 때문에 더이상의 반복문 실행은 진행되지 않으며 종료된다.

String[] days = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
        for (String day : days) {
            System.out.println(day);
        }

위 형식의 for 반복문 이외에도 아래와 같은 for-each문을 작성할 수도 있다. 앞서 배운 배열이나 Collection등에서 사용이 가능하다. 위 코드를 돌려보면 배열의 값들이 하나씩 출력이 된다. 즉 for-each문은 배열의 값들을 하나하나 변수에 담아서 출력된다고 생각하면 된다.

 

while(조건식){
    실행 코드 블럭
}
int i = 0;
int sum = 0;
while (i < 10) {
    sum += i + 1;
    i += 1;
}
System.out.println(sum);

위의 for 반복문과 똑같은 결과를 반환하는 예제다. i가 1,2,3...이렇게 증가하다가 11이 되면 조건식에 부합하지 않기 때문에 while반복문이 종료되고 출력이 된다.

 

while문의 경우 무한루프라고해서 어떠한 이유에서 루프를 벗어나지 못하는 경우가 발생할 수 있다. 그럴 경우

```java
int i = 0;
while (i < 10){
    if (i==5){
        break;
    }
    i += 1;
}
System.out.println(i);
```

다음 코드처럼 break를 사용하면 while문을 빠져나오기 때문에 무한루프를 예방할 수 있다. 즉 break는 반복문을 더이상 실행하지 않고 끝내는 역할을 한다 break와 다르게 반복문을 계속 진행하는 경우도 있다. 바로 continue라는 것인데

반복문을 진행하다 continue가 있을 경우, 다시 반복문 코드 블럭의 처음 부분으로 돌아가서 진행한다.

for(int i=0;i<10;i++){
  if (i==5){
      continue;
  }
  System.out.println(i);
}

출력을 해보면 숫자 5만 빼고 0~9까지 출력이 된다 즉, continue가 있을 경우 아래의 코드를 실행하지 않고 다시 반복문의 시작 부분으로 돌아가는 것이다.

 

int i = 1;
int result = 0;
do {
    result += i;
    i += 1;
} while (i < 2);
System.out.println(result);

이번엔 do while문이다. do while문은 무조건 코드 블럭을 한번 실행한 후 while문의 조건을 비교한다.

즉 while문의 조건을 확인하기 이전에 do 내부의 코드블럭을 한 번 시행한 후, 그 이후에는 while문의 조건에 일치하는지 확인하고 while문의 코드블럭이 실행된다. 그러므로 위의 코드의 경우 실행시키면 결과가 1가 나온다.

 

이번엔 여기까지 공부한 후 다음에는 객체지향언어 클래스, 인스턴스, 메소드, 생성자, 상속, 접근제어자, 추상클래스, 인터페이스 등을 공부해볼 예정이다. 

 

아직까지는 다른 언어들과 큰 차이점이 없어 공부하는데 어려움이 없었고 앞서 배운 python의 개념들과 유사해서 더 수월하게 공부한 것 같다. 

'공부기록 > Java' 카테고리의 다른 글

Java 해쉬함수  (0) 2022.01.15
Java (네트워킹)  (0) 2022.01.10
Java (제네릭스)(람다)(스트림)  (0) 2022.01.09
Java (예외,에러처리)(날짜와 시간 다루기)(컬렉션)  (0) 2022.01.08
Java 객체지향언어 (클래스,인스턴스,메소드,생성자,상속,접근제어자,추상클래스,인터페이스)  (0) 2022.01.06
    '공부기록/Java' 카테고리의 다른 글
    • Java (네트워킹)
    • Java (제네릭스)(람다)(스트림)
    • Java (예외,에러처리)(날짜와 시간 다루기)(컬렉션)
    • Java 객체지향언어 (클래스,인스턴스,메소드,생성자,상속,접근제어자,추상클래스,인터페이스)
    동석쿠
    동석쿠

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.