Language/Java

[Java] 간단한 텍스트 파일 입출력
·
Language/Java
파일 입출력 외부 파일을 읽고 쓰거나 저장해야 할 경우, 파일을 코드로 입력받고 출력할 수 있도록 처리해야 한다. 입력 파일을 읽고 필요한 작업을 수행한 후, 결과를 새로운 파일로 저장하는 방식을 사용한다. 파일로 저장하는 이유 중 하나는 데이터를 스토리지에 저장하여 반영구적으로 보존할 수 있기 때문이다.컴퓨터의 기억장치는 주기억장치와 보조기억장치로 크게 나눌 수 있는데, 주기억장치는 흔히 말하는 RAM이고, 보조기억장치는 SSD, HDD 등을 말한다. 주기억장치는 휘발성 메모리를 사용하기 때문에 전원이 꺼지면 데이터가 사라진다. 반면 보조기억장치는 비휘발성 메모리를 사용하기에 전원 공급 없이도 데이터 보존이 가능하다. 단 데이터 처리에서 RAM이 빠르기에 RAM에서 일반적으로 데이터를 처리한다.파일 입..
[Java] 예외(exception)와 예외 처리(exception handling)
·
Language/Java
예외 모든 프로그래밍 코드는 오류가 발생할 가능성이 있다. 그냥 실수로 오타를 낼 수도 있고, 잘 모르고 문법에 안 맞게 코드를 짤 수도 있으며, 예상하지 못한 값이 들어오며 오류가 발생할 수도 있다. 이러한 오류는 Throwable 클래스(참고 링크)의 하위 Error 클래스(참고 링크)와 Exception 클래스(참고 링크)에 정의되어 있다.오류(error)는 메모리 부족(OutOfMemoryError), 스택오버플로우(StackOverFlowError)처럼 JVM이나 하드웨어 등 시스템의 문제로 발생하는 것이다. 그러므로 개발자가 다루기 힘들고, Error가 발생하면 프로그램은 종료된다.그러나 예외(exception)는 발생하자마자 프로그램을 종료하지 않는다. 즉 개발자가 예외를 처리할 수 있다. ..
[Java] 인터페이스(interface) 및 디폴트(default) 메소드와 정적(static) 메소드
·
Language/Java
인터페이스 인터페이스란 기본적으로 코드 수행부가 없는 추상 메소드로 구성된 것이다. 상속 가능한 추상 클래스와 유사하지만, 추상 메소드만 선언되어 있다는 점, 이 때문에 상속과 같이 클래스에 구현(일종의 상속)이 가능하고 이를 통해 다중 상속이 불가능한 자바에서 인터페이스를 통한 일종의 다중 상속이 가능하다는 점이 특징이다. 이를 통해 다형성과 유연성에 이점을 가진다.기본적인 선언 문법은 아래와 같다.access_modifier interface Name { abstract public return_type method_name(parameter); ...}이때 인터페이스에 포함되는 추상 메소드는 자동으로 abstract와 public의 속성을 가지며, 따라서 생략할 수 있다.앞서 말한 바와 ..
[Java] abstract 키워드를 통한 추상 클래스와 추상 메소드
·
Language/Java
추상 클래스 업캐스팅과 다운캐스팅을 통해 객체를 좀 더 자유롭게, 특히 배열등으로 묶어서 관리할 수 있다. 이때 부모 클래스에서 미리 변수와 메소드를 선언해놓고, 이를 자식 클래스에서 메소드 오버라이딩을 통해서 각각 다르게 정의한다면, 업캐스팅을 통해 다룰 때 같은 메소드를 사용하여도 다른 메소드가 사용되므로 보다 유연하고 효율적으로 객체를 다룰 수 있다.이때 부모 클래스는 자식 클래스를 유연하게 사용하기 위해서만 사용되므로 직접적으로 객체가 선언되서는 안되고, 클래스는 자식 클래스가 가질 기본적인 정보만을 담아야 한다. 이를 abstract 키워드를 이용하여 달성할 수 있다. abstract 키워드를 사용하여 클래스를 선언하면 추상 클래스를 만들어 직접적으로 해당 클래스를 사용하지 못하게 한다. 즉 업..
[Java] 업캐스팅(upcasting)과 다운캐스팅(downcasting)
·
Language/Java
업캐스팅 캐스팅은 자료형을 변환하는 것을 말한다. 보통은 자료형을 변형하는 일은 기본 자료형을 변환할 때, 예를 들어 int 형 변수를 double 형으로 변환할 때가 많지만, 어떤 클래스의 객체를 변환할 때도 있다.상속 관계가 있는 객체, 즉 자신의 부모 클래스가 있는 클래스의 객체가 있다고 가정하자. 이 객체를 부모 클래스의 객체로 변환하는 것이 업캐스팅이다.예를 들어 아래와 같은 클래스 관계가 있다고 가정하자.class ParentsClass { ...}class ChildClass extends ParentsClass { ....}그렇다면 아래와 같이 업캐스팅을 할 수 있다. 기본 생성자를 생성할 수 있다고 가정했다.ParentsClass p = new ChildClass();혹은 아래..
[Java] 클래스 상속(inheritance)
·
Language/Java
상속 상속이란 기존 클래스를 확장하는 개념으로 부모 클래스(parent class)의 속성과 기능을 자식 클래스(child class)에 물려주는 것이다. 즉 자식 클래스에서는 부모 클래스의 인스턴스 변수와 인스턴스 메소드를 사용할 수 있다. 단 부모 클래스의 인스턴스 변수와 인스턴스 메소드의 접근지정자가 private이거나, default인데 패키지가 다르다면 자식 클래스에서 접근이 안된다. 부모 클래스가 아니라 슈퍼 클래스(super class), 자식 클래스가 아니라 서브 클래스(sub class)라고도 한다.상속을 통해서 기반 클래스에 있는 멤버 변수와 멤버 함수를 그대로 사용할 수 있으니 파생 클래스에서는 멤버 변수와 함수를 간결하게 작성할 수 있고, 클래스들 간 구조적 관계를 파악하기도 용이하..
[Java] 접근 지정자(access modifier)
·
Language/Java
접근 지정자 접근 지정자는 말 그대로 접근을 지정하는 키워드이다. 객체지향에서 중요한 은닉을 달성하기 위해 사용된다. 접근 지정자가 아니라 접근 제어자, 접근 제한자라고도 하며, 이를 통해 접근 가능한 범위를  각각 지정할 수 있다.접근 지정자의 종류는 아래와 같다.public: 모든 다른 클래스에 허용한다.protected: 상속받은 클래스와 같은 패키지에 소속된 클래스에만 허용한다.default: 기본 제한자로 접근 지정자를 설정하지 않으면 default가 되며, 같은 패키지에 소속된 클래스에만 허용한다.private: 해당 클래스에만 허용한다.표로 보면 다음과 같이 허용된다.접근 지정자해당 클래스 내부같은 패키지자식 클래스모든 클래스publicOOOOprotectedOOOXdefaultOOXXpri..
[Java] 클래스(class)와 객체(object) 선언
·
Language/Java
클래스와 객체 선언 및 접근 클래스는 객체를 생성하기 위해 정의된 틀로 클래스 내에는 변수와 메소드가 존재한다. 메소드는 다른 언어에서는 함수라 불린다.객체는 클래스를 통해 생성된 것으로 클래스가 선언한 변수와 메소드를 사용할 수 있다. 이를 인스턴스(instance)라고도 부르고, 때문에 객체를 만드는 과정을 인스턴스화(instantiation)이라 부르며,따라서 객체가 가지고 있는 변수를 인스턴스 변수, 메소드를 인스턴스 메소드라 부르기도 한다. 하나의 클래스를 통해 여러 객체가 생성 가능하며, 이때 객체들은 각각의 인스턴스 변수를 가진다. 즉 클래스가 설계도라면 객체는 설계도로 만들어진 것이다.클래스는 class 키워드를 통해 만들 수 있다. 예를 들어 아래와 같이 사람이라는 클래스를 만들어보자.p..
[Java] Scanner 클래스를 이용한 입력
·
Language/Java
입력 import java.util.Scanner;java.util.Scanner 를 import 해주고 사용하면 된다.먼저 Scanner 객체를 만들어주고 사용해야 한다.Scanner sc = new Scanner(System.in);System.in 을 생성자에 매개변수로 넣어 표준입력을 사용한다.기본적으로 next 메소드를 이용하여 공백문자 전까지 입력받을 수 있고, nextLine 메소드를 이용하여 줄바꿈 문자, 즉 엔터 전까지 입력받을 수 있다. 이때 입력은 String 으로 반환한다. 단 nextLine 메소드를 이용할 때 직전 입력이 있다면 그 입력의 남은 개행문자를 받아와 입력이 종료될 수 있기 때문에 주의해야 한다.그 외 자료형으로 입력을 받고 싶다면 next 뒤에 자료형을 붙이면 된다...
[Java] 연산자 우선순위
·
Language/Java
연산자 연산자는 데이터를 처리하거나 연산을 수행할 때 사용되는 기호나 키워드이다. 연산자는 하나 이상의 피연산자와 결합되어 수식을 이루며, 수식은 연산자가 적용된 결과값을 반환한다.특히, 수식에 여러 개의 연산자가 포함되어 있을 때, 어떤 연산자를 먼저 적용하느냐에 따라 결과값이 달라질 수 있기 때문에 연산자의 우선순위는 매우 중요한 개념이다. 이는 수학에서 사칙연산을 할 때, 곱셈과 나눗셈을 덧셈과 뺄셈보다 먼저 계산하도록 정해진 규칙과 같다.그러나 복잡한 수식의 경우, 괄호 () 를 사용하여 명시적으로 연산의 우선순위를 지정하는 것이 좋다. 이렇게 하면 코드의 가독성을 높이고, 실수를 줄일 수 있다. 따라서 연산자 우선순위를 일일이 암기하려고 하기보다는, 필요할 때 괄호를 적절히 사용하는 것이 더 효..
애스터로이드
'Language/Java' 카테고리의 글 목록