[Java 스터디] Java 소스코드의 골격 & 자료형

🐧코딩하는 애기 펭귄·2023년 3월 31일
1

sscc Java 스터디

목록 보기
2/10
post-thumbnail

Java의 기본적인 코드의 형태와 Java의 기본 자료형이 어떤 것들이 있으며, 사용법과 주의할 점 등을 적어보았다.

cf) 이글은 2023년 3월 28일에 진행됐던 sscc 자바 스터디 2주차 스터디 내용을 정리한 글입니다.

Java 소스코드의 기초 구조

1. Java의 기본구조

모든 프로그래머가 처음 언어를 배울 때 마주하는 Hello World 예제를 통해 자바의 기본 구조를 살펴보자.

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

C언어와는 다르게 굉장히 많은 단어가 사용된다.
이를 하나 하나 뜯어서 살펴보면 아래와 같은 구조로 되어 있음을 알 수 있다.
(접근 제어자) class (클래스 이름){

	(접근 제어자) [static] (반환형) (함수이름) (매개변수){

	(명령문);

	}

}

접근 제어자니 클래스 이름이니 지금은 배우지 않은 내용이므로 자세히 볼 필요는 없다. 어차피 나중 가면 다 배운다.

[꼭 외워야 할 것]

정말 무슨 소리인지 하나도 모르겠다면 이것만 외우자.

  1. 자바는 항상 클래스 안에 함수가 있다.
  2. 클래스 명은 소스파일 명과 같아야 한다.
  3. main 함수에 있는 순서대로 실행된다.
  4. public static void main(String[] args){ }



2. Java의 명명 규칙

자바에서 클래스명대문자로 시작한다. 그 외에 함수나 변수는 모두 소문자로 시작한다.

이걸로 해당 인자가 함수인지 클래스인지 알 수 있다.
(ex, String은 primitive 타입이 아니라 reference 타입이다. 대문자로 시작 == 클래스)

primitive 타입 - 언어에서 미리 지정된 자료형

또한, Java는 CamelCase를 준수한다.
(ex, class HelloWorld, Racing Game, getValue(), runRace() ...)
TMI) CamelCase란? - 각 단어의 시작부분을 대문자로 작성하여 음절을 표기하는 방법. 
그 모양새가 꼭 낙타 등의 혹 같다고 하여 붙여진 별명이다.


변수와 기본 자료형

1. 변수명 짓기

기본적으로 다른 언어와 비슷하다.

  1. 변수명은 숫자로 시작할 수 없다.
  2. $와 _이외의 특수문자는 사용할 수 없다.
  3. 키워드, 예약어는 사용할 수 없다. (ex, return, int ...)

2. 자료형

자바에서는 8개의 primitive 타입이 존재한다. 이 외에 모든 것은 전부 reference 타입이므로 8개만 외우자.

1) Primitve 타입

  • 정수 : byte, short, int, long

  • 실수 : float, double

  • 참/거짓 : boolean

  • 문자 : char


    각 항목을 자세히 살펴보자.

  • 정수, 실수

    자바에선 형 지정을 따로 안 할 경우 디폴트로 정수는 int, 실수는 double이 지정된다. 따라서, 디폴트 이외의 것을 사용하려면 별도의 처리가 필요하다. (int 범위가 넘어가면 'L'을 적는다거나, float 사용시 'F'를 적는다는지 등등.)

  • 8진수, 16진수

    또한, C/C++ 처럼 8진수, 16진수 표현을 할 때, 숫자 앞에 각각 0, 0x를 붙여 표현한다. 물론 이 친구들도 별도의 자료형이 존재하는 것이 아니라, 8개의 자료형 중 하나로 표현되어야 한다.

    따라서, 8진수와 16진수는 int 자료형을 사용한다.

  • boolean

    C/C++의 _Bool 형과 같다. true, false로 표현하는데,
    여기서 주의해야 할 점은 C언어처럼 true == 1, false == 0 으로 간주하여 사용하면 안 된다.
    자바는 오직 boolean 타입을 true나 false로 적어야 한다 (안 그럼 컴파일 에러남).
    while(1) 이런 거 안 된다는 얘기다. 헷갈리지 말자.

2) 자주 쓰는 Reference 타입

  • 문자열 : String, StringBuffer(요건 나중에 배움!)

  • 배열 : List, Map, Set

위에도 서술했지만, String은 클래스이므로 첫 글자를 대문자임을 주의하자.

  • 문자열 내장 메소드

파이썬의 기본 문자열 메소드와 기능적으로 유사하다.

.equals() - 같으면 true, 다르면 false 리턴
.indexOf() - 특정 문자의 '시작' 위치를 리턴
.contains() - 특정 문자열을 포함하면 true, 없으면 false 리턴
.charAt() - 특정 문자(char) 인덱스 리턴
.split() - 문자열을 나누어서 배열로 저장

  • charAt 사용 방법
String str = new String();
char c;
str = "안녕하세요";
c = str.charAt(0);
System.out.print(c);

이 코드를 수행하게 되면 str에 저장되어 있는 "안녕하세요" 에서
0번째 인덱스인 '안'이 화면에 출력된다.

나는 아직 charAt() 밖에 사용해보지 못해서 각 메소드의 자세한 사용 방법은 서술하지 않겠다.

3. 배열

배열의 크기는 고정되어 있다.

사용법이 2가지인데, 사용 예재를 보며 학습해보자.

int[] odds = {1, 3, 5, 7, 9};	//1번 케이스


String[] pokemons;				//2번 케이스
   pokemons = new String[7];

1번의 경우, C언어에서의 배열 선언 방법과 똑같다. (대괄호 위치만 조금 바뀐 것 뿐)

2번의 경우, C에서는 상상할 수 없는 선언 방식이다. 문자열 배열을 만들었는데, 초기화도 안 한 주제에 배열의 크기를 지정하지 않았다. 그리고 후에 new 연산자를 이용하여 배열을 할당했다.
이는, 자바의 클래스 특성에 의한 것이다.



심화 자료형

유의할 점. 심화 자료형의 메소드를 외우려 하지 마라.
이런 게 있다는 걸 알아만 두고 검색해서 쓸 수 있으면 충분.

1. 리스트(List)

출처 : 점프 투 자바 - 리스트 (List)

리스트는 배열과 매우 유사하지만, 여러 방면에서 편리한 기능을 제공한다.
배열과 리스트의 가장 큰 차이점은 리스트는 크기가 고정되어 있지 않다.

import java. util.ArrayList;

add, get, size 등의 편리한 메소드가 존재한다.

1) add

입력 값을 리스트에 삽입하는 메소드다.

1. pitches.add("138");		//pitches 객체 맨 뒤 인덱스에 "138" 추가
2. pitches.add(0, "133"); 	//첫 번째 위치에 "133" 삽입

2) get

리스트에 저장된 값을 추출하는 메소드다.

System.out.println(pitches.get(1));	//pitches 객체의 2반째 값을 출력한다.

3) size

ArrayList에 저장된 원소의 갯수를 리턴한다.

System.out.println(pitches.size());	//pitches 객체에 담긴 갯수 출력

4) contains

contains 메소드는 리스트 안에 해당 항목이 있는지를 판별하여 그 결과를 boolean으로 리턴한다.

System.out.println(pitches.contains("142"));	//pitches 객체가 "142"를 원소로 갖는다면 true가 출력

5) remove

remove 메소드에는 2가지 방식이 있다. (이름은 같지만 입력파라미터가 다르다)

    1. remove(객체)
    1. remove(인덱스)

첫번째 remove(객체)의 경우는 리스트에서 객체에 해당되는 항목을 삭제하고 삭제한 결과(true, false)를 리턴한다.

System.out.println(pitches.remove("129"));

true
"129"라는 항목이 성공적으로 삭제되고 true를 리턴한다.


두 번째 remove(인덱스)의 경우는 해당 인덱스의 항목을 삭제하고 삭제된 항목을 리턴한다.

System.out.println(pitches.remove(0));

138
pitches의 첫번째 항목은 "138"이므로 "138"이 삭제된 후 "138"을 리턴한다.

cf. 제너릭스(Generics)

ArarayList 안에 담을 수 있는 자료형을 한정시키는 기법이다.
제네릭스를 이용하면 좀 더 명확한 타입체크가 가능해진다.

ArrayList<String> pitches = new ArrayList<>();  // 선호되는 방식

제네릭스를 사용하지 않으면 리스트에 여러 가지 자료형의 원소들이 들어갈 수 있고, 이는 나중에 리스트를 다룰 때 형 변환 과정에서 잘못된 형변환으로 인한 오류가 발생할 가능성이 있다.

따라서, 특별한 목적이 있는 것이 아니라면 제네릭스를 사용할 수 있을 때 사용하는 것이 좋다.

2. 맵(map)

배열처럼 인덱스를 사용하는 것이 아닌 Key 값을 사용한다.

import java.util.Hashmap;

사전(딕셔너리)과 같은 방식으로 값을 저장하는 자료형이다.

ex)

import java.util.HashMap;
public class Sample {
  public static void main(String[] args) {
    HashMap<String, Integer> map = new HashMap<>();
    map.put("컴퓨터학부", 140);
    map.put("소프트웨어학부", 100);
  }
}

3. 집합(Set)

수학에서의 집합을 떠올리자. 중복을 알아서 걸러준다.

import java.util.HashSet;

순서가 없고 중복도 발생하지 않는 자료형이다.
add, get, size 등의 편리한 메소드를 제공한다.

0개의 댓글

관련 채용 정보