yooniiverse
개발 블로그
yooniiverse
전체 방문자
오늘
어제
  • 분류 전체보기
    • 운영체제
    • 네트워크
    • ~2023.02
      • 외부교육
      • 대외활동
      • 스터디
      • 동아리
      • TIL
      • IT지식
      • 기타
      • 트러블 슈팅
      • 프로그래밍
      • Python
      • Java
      • JS
      • DB(SQL)
      • JSP
      • Spring
      • 기술면접
      • 자바
      • 코딩테스트
      • 자료구조
      • 알고리즘
      • 백준 문제풀이
      • 인공지능
      • 머신러닝
      • 프로젝트
      • 안드로이드 앱개발
      • 웹개발
      • 웹 서비스
      • 웹퍼블리싱
      • Node.js 백엔드 개발
      • CS
      • 1일 1CS지식
      • 운영체제
      • 네트워크
      • 데이터베이스
      • 정보처리기사
      • 도서 리뷰
      • 개발 관련 도서
      • 기타 도서

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
yooniiverse

개발 블로그

~2023.02/Java

자바 기초 _ [토픽1] 자바 왕기초 _ Hello, Java!

2021. 12. 25. 21:51
자바와 객체 지향

자바와 객체 지향

더보기

자바와 객체 지향은 뗄 수 없는 개념이다. 자바는 처음부터 객체 지향 언어로 만들어졌다.

객체 지향 프로그래밍(Object Oriented Programming, OOP)은 프로그램을 작성하는 기법인데,

부품에 해당하는 객체를 먼저 만들고, 이것들을 하나씩 조립 및 연결해서 전체 프로그램을 완성하는 기법을 말한다.

객체 지향이 잘 적용된 언어는 코드의 구조가 명확하기 때문에 코드를 이해하기 쉽고 관리와 유지 보수가 효율적이다.

언어와 함께 보기

더보기

객체 지향이 코드에 어떻게 드러날까?

다른 언어와 비교해 보자.

 

다음은 Hello라는 문구를 출력하기 위한 코드이다.

Java버전

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello");
    }
}

C버전

#include <stdio.h>

int main()
{
    printf("Hello\n");
    return 0;
}

Python버전

print("Hello")

다 생김새가 다른 것을 확인할 수 있다.

 

먼저 C언어와 비교해 보자.

C언어는 객체지향이 적용되지 않은 대표적인 언어이다.

Java보다는 사용되는 단어 수가 적고, 비교적 간단한 형태로 작성되어 있다.

 

이번엔 Python과 비교해 보자.

Python은 코드가 더 짧다. Python은 객체 지향이 적용된 언어이지만, 객체 지향이 강하게 드러나는 언어는 아니다.

오히려 많은 내용을 생략하고, 쉽게 코드를 작성하는 것에 초점이 맞추어져 있다.

 

반면, 자바는 객체 지향의 개념이 언어에 강하게 드러나는 특징이 있다.

그래서 자바는 한 줄을 출력하는 데도 public, class, static, void, System, out 등 많은 용어가 등장한다.

그리고 그만큼 많은 의미를 코드에서 전달하고 있다. 객체 지향적 구조와 설계를 정확히 표현하는 것에 특화된 언어라고 할 수 있다.

 

따라서 객체 지향을 배우지 않고는 자바를 완벽히 이해할 수 없다.

 

자바의 언어 자체에 객체 지향적인 개념이 녹아들어 있기 때문에,

여러분은 '자바 프로그래밍 기초'를 배우면서 자연스레 상속, 인터페이스 등 기본적인 객체 지향 개념을 함께 배우게 될 것이다.

 

물론 위에서 살펴본 'Hello' 출력 코드에도 이런 개념이 포함되어 있다.

다른 언어보다는 코드가 길어서 이해하기 어렵겠지만, 'Hello' 출력 코드를 이해한다면, 객체 지향 개념을 맛볼 수 있다. 그리고 자바 프로그래밍의 기본적인 구조를 알 수 있다.

 

다음 강의에서는 'Hello, World' 출력 코드를 하나씩 간단히 뜯어보고, 기본적인 자바 프로그래밍의 구조를 살펴보도록 하자.

 

프로그래밍 기초
더보기

변수

변수는 정보를 저장하고 쓸 수 있게 해주는 '이름표' 같은 개념이다.

예를 들어 'brand'라는 변수를 만든 뒤, 그 안에 '나이키', '애플', '스타벅스' 같은 정보를 넣어둘 수 있다.

'brand'라는 변수에 '나이키'를 저장해두면, 코드 아무 곳에서나 'brand'라는 이름으로 '나이키'를 사용할 수 있다.

'brand' 변수의 값을 '스타벅스'로 바꾸면, 코드의 다른 부분에서도 'brand'라는 이름이 '스타벅스'를 의미하게 된다.

자료형

'유재석', '박명수', '노홍철'은 문자이다.

10, 20, 99는 숫자이다.

컴퓨터에는 이처럼 여러 가지 형태의 자료가 있다. 이 자료들의 종류를 '자료형'이라고 부른다.

자료형에는 대표적으로 숫자, 문자 그리고 참과 거짓을 나타내는 논리형 등이 있다.

자바에서는 int, double, char, boolean 등으로 표현한다.

함수

변수가 값을 보관하는 역할을 한다면, 함수는 명령들을 보관하는 역할을 한다.

동일한 내용을 반복하여 쓰고 있거나, 프로그램을 깔끔하게 정리하고 싶을 때 함수를 사용하면 되는 것이다.

 

수학에서는 x라는 입력값을 넣었을 때, y라는 결괏값이 나오는 것을 함수라고 한다.

프로그래밍에서 함수도 비슷하다.

입력값을 넣은 후, 그 값을 사용해서 필요한 동작을 하고, 출력값을 만들어낸다.

함수의 입력값을 '파라미터' 혹은 '매개변수'라고 부르며, 출력값을 '리턴값'이라고 부른다.

 

함수는 대부분 ( )와 { }를 사용한다. PrintName이라는 함수 이름이 있다고 했을 때, 아래와 같은 형태로 주로 사용한다.

PrintName(파라미터) {
    함수 동작
    return 리턴값
}

함수와 자료형

위의 함수 형태를 자바 스타일에 맞게 조금 더 배워보자.

 

함수의 입력은 '파라미터', 출력은 '리턴값'이라고 했다.

자바에서는 함수의 입력은 어떤 자료형인지, 출력은 어떤 자료형인지 미리 정해준다.

그리고 맞지 않는 자료형을 입력하거나 출력하게 되면 오류가 발생한다.

 

그래서 자바는 함수의 형태가 조금 더 추가되어서, 아래와 같은 형태가 된다.

리턴자료형 PrintName(파라미터자료형 파라미터) {
    함수 동작
    return 리턴값
}

'리턴자료형'과 '파라미터자료형' 자리에는 int, double, char, boolean 등의 자료형 이름이 들어가게 된다.

배열

여러 개의 값을 하나의 변수에 담고 싶을 때도 있다.

이럴 때 배열을 사용한다. 배열은 주로 [ ]를 사용해서 표현한다.

코멘트

프로그램에 영향을 미치지 않도록 표시해주는 것을 말한다. 코드 사이에 메모 혹은 설명을 적기 위해 사용한다.

 

Hello World 이해하기
더보기
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello world!");
    }
}
  • class HelloWorld는 HelloWorld라는 클래스를 정의한다는 뜻. 첫 번째 줄의 중괄호와 마지막 줄의 중괄호 사이에 HelloWorld 클래스의 내용이 들어간다.
  • public이라는 키워드는 접근 제어자라는 것인데, public은 전체 프로그램의 어디에서든 접근 가능하도록 하는 제어자이다.
  • main은 정의할 메소드(함수)의 이름이다. 메소드란 클래스 안에 정의된 함수를 말한다. Java는 클래스 기반의 언어이기 때문에 Java의 함수는 모두 메소드이다. 물론 일반적으로 함수라는 말도 많이 사용한다.
  • 프로그램을 실행시키면 Java가 메인 메소드를 찾아서 실행시키기 때문에 이름을 main이라고 지어주어야 한다.
  • 그리고 이 main 메소드는 args라는 문자열 배열을 파라미터로 받는다.
  • 이 메소드 명 앞에 지금 void라고 적혀 있는 것은 메소드의 리턴 값을 선언하는 자리이다(메소드의 리턴 값의 자료형). 지금 우리가 쓰는 void는 리턴 값이 없다는 뜻이다. 만약 이 메소드가 정수형 값을 리턴 시킨다면 int를 쓰고 문자열을 리턴 시킨다면 String을 쓰면 된다. 
  • 맨 앞에는 또 접근 제어자 public이 있다. (일단 무시)
  • 그리고 그 옆에 static도 객체 지향 프로그래밍에서 아주 중요한 키워드인데 이것도 일단은 이해하기 어렵기 때문에 나중에 보도록 한다. (일단 무시)
  • 이제 메소드의 내용을 보기로 한다. 이 줄은 System이라는 Java에 내장되어 있는 클래스의 out이라는 클래스 변수의 println이라는 메소드를 호출하는 뜻이다. 그리고 이 메소드의 파라미터로 문자열 Hello world!를 넘겨주면 Hello world!가 콘솔에 출력되는 것이다.

 

Hello World 더 이해하기
더보기

Hello, World!를 출력하는 자바 코드이다.

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

자바는 객체 지향 개념이 잘 표현된 언어이기 때문에, 이 코드를 정확히 이해하기 위해서는 객체 지향 등 다른 개념들을 배워야 한다.

첫 번째 줄

public class HelloWorld { }

총 3개의 단어가 보이는데 뒤에서부터 보도록 하자.

HelloWorld

우선 HelloWorld 라는 단어는 우리가 정한 이름이다. 이 프로그램이 Hello, World!를 출력하는 프로그램이기 때문에 HelloWorld라고 지어준 것이다. 다른 이름을 사용해도 된다.

class

클래스(class)는 객체 지향 프로그래밍의 기본 단위라고 할 수 있다. 이후 '객체 만들기' 챕터에서 자세하게 배울텐데, 우선 지금은 기본 단위라고 생각하면 된다. class HelloWorld라고 썼으니, HelloWorld라는 이름의 클래스를 만든다는 말이 되겠다.

public

public은 '공적인' 이라는 뜻이다. HelloWorld라는 클래스는 누구나 사용할 수 있는 공적인 클래스라는 의미이다. 이를 접근제어자 라고 부르는데, public 외에도 private, protected 등이 있다.

 

이제 합쳐서 살펴보자.

public class HelloWorld

첫 줄은 'HelloWorld'라는 이름의 공개된 클래스를 만든다'는 이야기이다.

두 번째 줄

public static void main(String[] args) { }

두 번째 줄은 HelloWorld { } 괄호 안에, 즉 HelloWorld 클래스 안에 위치하고 있다.
클래스 안에는 클래스가 어떤 동작을 할 지 정의해 주는데, 이 부분을 메소드라고 부른다. (클래스 안에 정의된 함수이다.)
메소드에 대해서는 객체 만들기 챕터 - 메소드에서 배울 수 있다.

첫 번째 줄이 클래스를 만드는 코드였다면, 두 번째 줄은 메소드를 만드는 코드이다.
총 6개의 단어가 보이는데 짧게 살펴보자.

main

먼저 살펴볼 단어는 가운데에 있는 main 이다. 메소드의 이름으로 사용되고 있다.
main이라는 이름은 좀 특별한데, 자바 프로그램을 실행하면 가장 먼저 main을 찾아서 실행시키게 된다.
그렇기 때문에 main이라는 단어는 모든 자바 프로그램에 항상 포함되어 있다. (이름을 바꾸면 안 되겠죠?)
우리가 실행시키고 싶은 자바 코드가 있다면, main 안에 넣어주면 된다.

이제 main 앞에 나오는 3개의 단어를 살펴보자. 이 3개의 단어는 main 메소드의 특징을 설명해주는 말로, 항상 main과 함께 나오게 된다.

public

앞서도 살펴본 public이다. main 메소드는 누구에게나 공개되어 있다는 의미이다.

static

static도 이후에 더 자세히 살펴볼텐데, static을 써주면 그 부분을 바로 실행 가능하게 만들준다. main은 가장 첫 번째로 실행되어야 하기 때문에, main 앞에는 항상 static을 붙이게 된다. static을 붙이는 이유는 자바, 더 정확하게! 챕터 - 인스턴스 메소드 vs. 클래스 메소드에서 배울 수 있다.

void

메소드는 필요에 따라 실행이 끝나고 어떤 값을 되돌려주기도 한다.

그리고 그 되돌려줄 값이 무엇인지 미리 메소드 이름 앞에 써준다.

void는 되돌려주는 값이 없다는 의미이다. 만약 실행이 끝나고 숫자형을 돌려줄 예정이면, void 대신 숫자를 의미하는 int를 쓰면 된다.

메인 메소드는 보통 아무 것도 되돌려주지 않기 때문에 void를 붙여주게 된다.

이제 main 뒤에 나오는, 괄호 안의 단어 2개를 살펴보자.

String[] args

이 두 단어는 같이 보는 게 좋다.

String[] args는 괄호 ( )안에 위치하고 있는데 괄호 안에 있다는 것은 메소드에 전달되는 값이라는 의미이다. 파라미터라고도 한다.

앞에 있는 String[]은 문자열을 의미하고, 뒤에 있는 args는 변수 이름이다. 즉 args라는 이름의 문자열 변수가 메소드에 전달된다는 뜻이다.

지금 괄호 ( )의 주인은 main 메소도이므로,

누군가 main 메소드에게 파라미터를 전달해주면, main 메소드 안에서 args라는 이름으로 받아서 사용할 수 있다.

문자열 등 자료형에 대해서는 변수와 연산 챕터 - 자료형에서 더 자세히 배울 예정이다.

합쳐서 살펴보자.

public static void main(String[] args) { }
  1. main 메소드가 있습니다.
  2. 이 main 메소드는 누구나 접근할 수 있고 (public), 바로 실행할 수 있고 (static), 아무 것도 되돌려주지 않습니다. (void)
  3. 나중에 main 메소드에 전달해주고 싶은 값이 있다면, 문자열 형태로 전달해야 하며, main 메소드 안에서 'args' 라는 이름으로 사용할 수 있습니다.

세 번째 줄

System.out.println("Hello, World!");

 

main 메소드 안에는 가장 먼저 실행하고 싶은 코드를 넣는다고 했다.

우리는 Hello, World!라고 출력하고 싶기 때문에, 출력을 해주는 코드가 안에 들어 있다.

하나씩 살펴보자.

System

객체 지향의 기본 단위는 클래스라고 했다. System도 클래스이다. 다만, 자바에서 미리 직접 만들어둔 클래스이다. 우리는 이렇게 미리 만들어진 클래스를 활용해서 어려운 동작을 코드 한 줄로 만들 수 있다. System 클래스는 말 그대로 입력, 출력 등 시스템에 관련된 기능들을 모아둔 클래스이다.

out

System 클래스 안에는 여러 기능이 모여 있기 때문에, 이해하기 쉽게 System.in, System.out, System.err 등으로 분리되어 있다. out이라는 이름을 보면, 출력과 관련된 기능이 들어 있음을 알 수 있다.

println()

print는 '출력하다' 라는 뜻이고, ln은 line의 줄임말이다. 괄호 안에 원하는 텍스트를 넣으면 출력해주고, 마지막에는 엔터를 치듯이 다음 줄(line)로 넘겨주는 역할을 한다.
println 역시 기능을 구현한 부분이기 때문에 메소드라고 부른다.

"Hello, World!"

두 개의 따옴표 ("")는 문자열을 의미한다. 괄호 안에 넣으면 메소드에 전달해준다고 했었다.

Hello, World!라는 문자열을 출력하기 위해 println 메소드에 전달해주고 있다.

정리해 보자.

System.out.println("Hello, World!");

이 줄은 'System'이라는 자바에 내장되어 있는 클래스의 'out'안에 있는 'println'메소드를 사용해서,

Hello, World!를 출력하라는 뜻이다.

결과

이 코드를 통해 우리는 드디어 다음과 같은 결과를 얻을 수 있다.

Hello, World!

'~2023.02 > Java' 카테고리의 다른 글

자바 기초 _ [토픽2] 자바 객체 지향 프로그래밍 _ 객체 설계하기  (0) 2021.12.30
자바 기초 _ [토픽2] 자바 객체 지향 프로그래밍 _ 객체 만들기  (0) 2021.12.29
자바 기초 _ [토픽1] 자바 왕기초 _ 배열  (0) 2021.12.29
자바 기초 _ [토픽1] 자바 왕기초 _ 조건문과 반복문  (0) 2021.12.29
자바 기초 _ [토픽1] 자바 왕기초 _ 변수와 연산  (0) 2021.12.26
    '~2023.02/Java' 카테고리의 다른 글
    • 자바 기초 _ [토픽2] 자바 객체 지향 프로그래밍 _ 객체 만들기
    • 자바 기초 _ [토픽1] 자바 왕기초 _ 배열
    • 자바 기초 _ [토픽1] 자바 왕기초 _ 조건문과 반복문
    • 자바 기초 _ [토픽1] 자바 왕기초 _ 변수와 연산
    yooniiverse
    yooniiverse

    티스토리툴바