프로그래밍 방법론(Programming Methodology)라는 것이 있습니다. 프로그래머는 컴퓨터와 대화를 하는 사람으로 어떠한 언어를 사용해서 컴퓨터와 대화를 할지 결정해서 컴퓨터에게 작업을 지시하기도 하고, 컴퓨터의 이야기를 듣기도합니다.

 

JAVA라는 언어로 대화하기를 선택한 우리들은 JAVA언어를 어떻게 전달하는지 그 "방법" 알아야 [효율적]으로 컴퓨터와 대화할 수 있습니다.  '어떻게 컴퓨터에게 작업을 지시할 것인지에 대한 방법'을 "프로그래밍 방법론"이라고 부를 수 있습니다.(위키백과의 정의도 아래 남겨두겠습니다.) JAVA는 그 중 '객체지향 프로그래밍(Object Oriented Programming)'이라는 방법론을 사용합니다.


객체지향이란?

객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다.

< 출처 위키백과 https://ko.wikipedia.org/wiki/%EA%B0%9D%EC%B2%B4_%EC%A7%80%ED%96%A5_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8Dhttps://ko.wikipedia.org/wiki/%EB%B0%B0%EC%97%B4>

위에서 중요한 단어들만 굵음 처리해서 다시보겠습니다.

 

"객체 지향 프로그래밍은 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메시지를 주고받고, 데이터를 처리할 수 있다."

 

객체지향에서 핵심적인 단어들이 위에 적혀있습니다. 만약 우리가 '강아지'와 '고양이'을 "객체"로 간주한다면 다음과 같이 표현할 수 있습니다.

위 그림에서 '강아지'와 '고양이'는 객체(아래부터는 '클래스'라는 이름과 혼용하겠습니다.)입니다. 객체(클래스)는 성별, 키, 몸무게 같은 속성을 가질 수 있고, 밥먹기, 잠자기 등의 '행동'을 할 수 있습니다. 타 프로그래밍언어의 '함수'가 JAVA에서는 '메서드'라고 불린다고 생각해 주시면됩니다.

&lt;출처 : 위키백과&nbsp; https://ko.wikipedia.org/wiki/%ED%95%A8%EC%88%98 &gt;

프로그래밍에서 함수란 0개 이상의 입/출력을 받아 무엇인가 기능을 하는 개념입니다. JAVA에서는 이 함수를 '메서드'라고 부르며 '메서드'를 통해서 객체와 객체가 상호작용하며 프로그램이 진행됩니다.


클래스와 인스턴스

그러면 JAVA에서 어떻게 객체라는 개념을 코드로 표현하고 있을까요? 그걸 알기위해서는 우선 클래스와 인스턴스의 관계를 알아야합니다.

 

  • 클래스 : 객체를 만들기 위한 '틀'
  • 인스턴스 : 클래스라는 틀로 만들어진 '실제 객체'

 

최근에 유명한 넷플릭스의 오징어 게임의 달고나 게임을 기억하시는 분들이 많으실 겁니다. 달고나도구는 달고나를 반복적으로 찍어낼 수 있는 틀입니다. 이렇게 생성된 달고나를 '인스턴스'라고 칭하며, 달고나 도구를 '클래스'라고 부릅니다. 코드를 보며 실제 상황을 가정하겠습니다. 위의 그림중 강아지에 대한 클래스입니다.

// Dog.java

public class Dog{
	
	int gender;
	int height;
	int weight;
	boolean adorable;
	boolean cute;
	
	Dog(){
    		System.out.println("Hello Im dog");
    	}	// 객체생성자
	
	public void eat(){}
	public void bark(){}
	public void sleep(){}
	public void tailling(){}
	
}

JAVA에서 객체(틀)을 만들고 싶을때는 'class' 라는 예약어를 사용한 후 사용할 클래스명(여기서는 Dog)를 지정합니다. 클래스 블럭(중괄호로 둘러쌓인 부분)에는 변수선언(멤버선언), 매서드선언(행위선언)을 할 수 있습니다. 

 

중간에 System.out.println("Hello Im dog");가 보입니다. 이 출력문은 생성자이름인 Dog의 함수블럭에 존재하는데요. 이것은 매서드가 아닌 '생성자' 라고 불리웁니다. 

  • 생성자(Constructor) : 객체가 인스터스화될때(생성될 때) 호출되는 블럭 생략가능하다.

이 Dog틀롤 인스턴스를 만드는것을 예시로 보면서 생성자 이야기를 계속하겠습니다. 아래는 Dog틀을 이용해서 새로운 강아지 bagGu와 hwangGu를 만드는 코드입니다.

 

// DogTest.java

public class DogTest{
	public static void main(String[] args){
    		Dog bagGu;
        	Dog hwangGu = new Dog();
	}
}

Dog라는 '틀'은 자료형이 됩니다. 우리가 지난 시간 알아보았던 기본자료형또한 '틀'이고요. 따라서 변수를 선언하듯이

<자료형> [사용할 변수명] 의 형태로 인스턴스를 만들 수 있습니다. 이렇게만 하면 변수를 사용할 것이라는 '선언'만 진행한것입니다. '초기화'를 위해서는 'new' 라는 예약어를 이용합니다. 위 코드에서는 new Dog()가 될것입니다. 코드를 실행시켜보면 콘솔창에 다음과 같은 결과가 나올것입니다. 

Hello Im dog

이 'Hello Im dog'는 Dog hwangGu = new Dog();에서 출력된 코드입니다. 객체가 인스턴스가 될 때는 생성자가 호출이됩니다. 따라서 객체코드의 Dog(){ System.out.println("Hello Im Dog")}가 실행된 것입니다.


이번시간에는 객체와 인스턴스, 생성자에 관하여 간단하게 알아보았습니다. 다음시간에는 생성자의 활용법과 객체사용법을 조금더 알아보는 시간을 가지겠습니다!

'JAVA' 카테고리의 다른 글

[Java Project] 죽는날 타이머. DIE_ALARM  (0) 2022.09.18
[JAVA와 친해지기] 생성자  (0) 2021.12.13
[JAVA와 친해지기] 배열  (0) 2021.08.24
[JAVA와 친해지기] 반복문  (0) 2021.08.21
[JAVA와 친해지기] 흐름제어문  (0) 2021.08.19

프로그래밍과 알고리즘

 

우리는 JAVA를 이용해서 프로그래밍을 하고 있습니다! 근본적인 질문으로 프로그래밍이란 무엇일까요? 사전에 프로그래밍의 정의는 다음과 같이 서술되어있습니다!

컴퓨터 프로그래밍(영어: computer programming) 또는 간단히 프로그래밍(programming, 문화어: 프로그램 작성) 혹은 코딩(coding)은 하나 이상의 관련된 추상 알고리즘을 특정한 프로그래밍 언어를 이용해 구체적인 컴퓨터 프로그램으로 구현하는 기술을 말한다.

< 프로그래밍의 정의 : 출처 위키백과 https://ko.wikipedia.org/wiki/%EC%BB%B4%ED%93%A8%ED%84%B0_%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D >

2번째 줄을 조금 강조해서 볼까요?

 

"하나 이상의 관련된 추상 알고리즘을 특정한 프로그래밍 언어를 이용해 구체적인 컴퓨터 프로그램으로 구현하는 기술을 말한다."

 

오호; 그럼 여기서 프로그래밍 언어는 우리가 선택한 JAVA가 될 것이고 우리는 구체적인 컴퓨터 프로그램을 만들기 위해서 프로그래밍이라는 행위를 하는 것을 알 수 있겠죠! 그런데 앞쪽에 문제를 해결하기 위해 [추상 알고리즘]을 사용한다고 되어있습니다! 알고리즘이란 무엇일까요? 이번에는 알고리즘의 사전적 정의입니다.

알고리즘(영어: algorithm), 셈법은 수학과 컴퓨터과학, 언어학 또는 엮인 분야에서 어떠한 문제를 풀어 맺기 위해 정해진 일련의 절차나 방법을 공식화한 형태로 표현한 것, 계산을 실행하기 위한 단계적 절차를 의미한다. 

< 알고리즘의 정의 : 출처 위키백과 https://ko.wikipedia.org/wiki/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98 >

알고리즘은 문제해결을 위해서 사용하는 일련의 절차나 방법을 공식화한 형태라고 합니다! 알고리즘이 어떻게 생겼는지 한번 아래 그림을 보도록 할까요?

위 사진은 필자블로그의 다른 글이 WebHacking사이트 Suninatas의 1번 문제 풀이 알고리즘을 가져온 것입니다. 위와 같이 일련적으로 사용하는 문제 해결절차를 우리는 알고리즘이라고 정합니다!

 


변수와 상수

 

프로그래밍에는 어마어마하게 많은 수들이 있습니다! 위에 알고리즘만 보아도 위에서부터 2번째 그림에 str이라는 요소가 순서도 전반적으로 사용되고, 중간에는 "a"라던지 "in"이라던지, 고정된 값들이 있지요. 이런 수들은 프로그래밍에서 크게 가변성에 따라 다음의 2가지로 분류합니다.

  • 변수 : 프로그래밍을 사용하면서 변할 수 있는 수
  • 상수 : 변하지 않는 고정된 값

다음의 코드를 다들 코딩해 봅시다!

// VarConst.java

public class VarConst{

	public static void main(String[] args){
		int x = 1;			// x는 변수, 대입된 1은 상수
		int y = 3;			// y는 변수, 대입된 3은 상수
		String name = "REDUCTO";	// name은 변수, 대입된 "REDUCTO"는 상수

		System.out.println(x);
		x = y;				// 변수에는 다른 변수 대입가능
		//3 = x;			// 당연하게 상수는 대입불가
		System.out.println(y);
		System.out.println(x);
		System.out.println(name);
	}

}

Compile, 실행해보면 다음과 같은 값을 얻을 수 있습니다!

 

1
3
3
REDUCTO

* "=" 기호는 오른쪽의 값을 왼쪽에 대입하라는 의미입니다! 자세한건 다다음 시간(연산자) 편에서 계속됩니다!

main이라는 글자가 있는 줄의 바로 아래쪽 int x=3; 이라는 코드가 있습니다. int라는 단어는 넘어가고 x=3이니, 이제 우리의 변수 x는 3이라는 상수값을 가지고 있는 것입니다!


변수 명명법

 

변수 이름은 프로그래머가 작성하기 나름입니다! 특정한 합이라는 이름을 짓고 싶으면 sum이라는 변수명을 정의해도 되고, 임시 값이라는 의미를 담고 싶으면 tmp라는 이름을 사용하는 것도 전통적인 방법입니다! 단 다음의 규칙은 지켜야 됩니다!

  • 대소자는 구분되며, 변수 이름 길이에 제한은 없다.(x와 X는 다른 변수)
  • 숫자로 시작할 수 없으며, 공백은 사용불가( 3x, tmp_dd dd는 사용 불가한 변 수명 임)
  • 변수에 허용되는 글자는 대소문자, 숫자, _(언더스코어), $만 허용됨
  • 예약어 사용불가(예약어는 프로그래밍 언어에서 미리 정해둔 문법적으로 의미 있는 단어를 의미합니다.)

다음의 단어들이 변수의 이름으로 사용될 수 있겠네요!

ex > tmp, _file_name, isSetted, onClose, SUMOFSET2, m3val2

 

예약어는 다음의 글을 참고해 주세요!

2021.08.14 - [JAVA] - JAVA 예약어 종류

 

JAVA 예약어 종류

_(언더스코어) : JAVA 9부터 예약어가 되었습니다.(이제 단독으로 언더스코어만쓰는 변수명은 불가하네영) abstract : 추상클래스를 지정하는 데 사용됩니다. assert : 강한 에러검출을 위한 키워드 bool

tutoreducto.tistory.com


이번 시간에는 프로그래밍이 무엇인지, 우리가 하려는 JAVA 프로그래밍이란 무엇인지, 프로그래밍에서 사용되는 변수나 상수가 무엇인지에 대해서 알아보았습니다. 다음 시간에는 자료형이라는 주제로 또 인사드릴게요!

+ Recent posts