이번 포스트에서는 자바에서 사용되는 상속(Extends)이라는 키워드에 대해서 살펴보도록 하겠습니다.

 

객체지향언어인 Java는 클래스라는 개념을 활용하여 다양한 디자인 패턴으로 프로그램을 구현할 수 있습니다. 이번 시간에 포소트할 내용인 상속이라는 개념을 이용하여 클래스간 여러 관계(Relationship)를 보다 쉽게 구성할 수 있는데, 상속에 대해 크게 3가지로 키워드를 정의할 수 있습니다.

 

상속(Extends)이란?


  • 기존에 만들어진 클래스의 기능을 통해 새로운 클래스를 쉽게 만들 수 있는 방법이다.
  • 부모 클래스를 상속받은 자식 클래스는 부모 클래스의 속성과 기능도 이용할 수 있다.
  • 기존의 검증된 Class를 이용해서 빠르고 쉽게 새로운 Class를 만들 수 있다.

 

 

아래 예제를 통해 상속이란 키워드를 어떻게 사용하는지 살펴보겠습니다.

 

 

먼저 상속할 대상인 Parent Class를 생성해보겠습니다.

 

//Parent Class
package inheritance;

public class ParentClass {
	public ParentClass() {
		System.out.println("--- ParentClass() START ---");
	}
	public void parentFunc() {
		System.out.println("--- parentfunction() ---");
	}
}

 

이 후 Parent Class를 상속받을 Child Class를 생성하고 Parent Class를 상속받기 위해 extends라는 키워드를 사용합니다.

 

//Child Class
package inheritance;

//아래와 같이 ParentClass를 extends를 활용해 상속시켜줍니다.
public class ChildClass extends ParentClass {
	public ChildClass() {
		System.out.println("--- ChildClass() START ---");
	}
	public void childFunc() {
		System.out.println("--- childfunction() ---");
	}
}

 

Child Class에서 Parent Class를 상속받았기 때문에 Child Class 객체를 통해서 Parent Class의 메서드를 호출하여 사용할 수 있게 됩니다. 아래 작성한 Main Class에서 Child Class 객체를 생성하고 이를 통해 parentFunc() 메서드를 실행하는 모습을 확인할 수 있게됩니다.

 

//Main Class
package inheritance;

public class MainClass {
	public static void main(String[] args) {
		ChildClass child1 = new ChildClass();
		child1.childFunc();
		child1.parentFunc();
	}
}

 

※ Main Class에서 Parent Class 객체를 생성하지 않았지만 Child Class에서 Parent Class를 상속받았기 때문에 아래 콘솔 결과창에서 볼 수 있듯이 Parent Class의 생성자 메서드가 실행된 모습을 확인할 수 있습니다.

 

콘솔 실행화면

 

'Language > Java' 카테고리의 다른 글

[Java] java.exe와 javac.exe의 상관관계  (0) 2019.09.27

이번 포스트는 이클립스를 사용하면서 종종 확인할 수 있는 'Starting Tomcat Server at Localhost' 해결방법에 대해 살펴보고자 합니다.

 

이클립스를 사용하여 java프로그램을 Tomcat서버를 통해 실행하려고 할 때 다음과 같은 에러 메세지가 출력되는 것을 확인할 수 있습니다.

 

저는 Tomcat v9.0을 사용하고 있습니다.

 

위와 같은 에러메세지가 나오는 이유는 여러가지가 있지만 톰캣이 사용하는 포트를 다른 프로그램이 중복되어 사용하고 있거나 포트에 다른 문제가 발생했을 때 위와 같은 에러 메세지를 확인할 수 있습니다. 에러 메세지를 자세히 읽어보면 마찬가지로 포트와 관련된 문제라는 것을 확인할 수 있습니다.

 

그렇기 때문에 에러를 해결하기 위해서 Tomcat Server의 포트 값을 적절하게 설정해주면 문제를 해결할 수 있습니다.

 

해결방법


 1. 톰캣 서버 설정 창을 연다.

 

 

 2. Port값을 적절하게 수정해준다.

 

저의 경우 'Tomcat admin port' 값이 언제 바뀌었는지 모르겠지만 '-1' 이라는 이상한 값이 들어가 있어서 8005번이라는 포트값을 지정해주었습니다. 다른 경우로 톰캣서버는 기본적으로 HTTP/1.1 Connector Port를 8080으로 사용하고 있기에 간혹 오라클등 다른 프로그램에서 8080포트를 중복으로 사용하는 경우가 있다면 포트값이 중복되지 않게 바꿔줘야 합니다.

 

 3. 에러 해결 

 

포트값을 수정한 후 정상적으로 톰캣 서버가 작동하는 모습을 확인할 수 있습니다.

 

 

Java언어로 만들어진 프로그램이 실행되어 사용자의 눈에 보여지기까지 여러 단계를 거치게 된다.

 

그 중에서 중요한 역할을 하는 두 프로그램을 이번시간에 살펴보고자 한다.


  1. java.exe
  2. javac.exe

 

JDK가 설치된 경로로 들어가 bin 디렉토리로 들어가게 되면 아래와 같이 java.exe와 javac.exe 파일이 있는 모습을 확인 할 수 있다.

 

 

그렇다면 이 두가지 파일은 무슨 역할을 하는 것일까?


사용자가 만든 java소스들은(.java) 바로 기계어로 변환될 수 없다.


기계어로 변환되기전 .class 확장자명을 가진 바이트 코드 파일로 변환되어야 한다. 즉 컴파일 작업을 해줘야 하는데
이 컴파일러 역할을 하는 파일이 바로 javac.exe 파일인 것이다.

 

이 후 기계어로 변환되기 위해 Java 가상머신이 구동되어야 하는데
컴파일러를 통해 생성된 class파일을 가지고 기계어를 만드는 작업을 java.exe가 해주게 된다.

 

※정리

1. java.exe : JVM을 구동시키기 위한 명령 프로그램
2. javac.exe : *.java 파일을 컴파일 하기 위한 java 컴파일러

 

그리고 만들어진 기계어를 통해 프로그램이 실행되어 사용자 눈에 보여질 수 있게 된다.

이를 그림으로 도식화하면 아래와 같이 나타낼 수 있다.

 

[출처 : Inflearn.com - 자바 프로그래밍 입문 강좌]

 

'Language > Java' 카테고리의 다른 글

[Java] 상속(Extends)이란?  (0) 2019.10.02

 express를 사용하여 api공부를 위해 실습을 하고 있는데 client에서 요청한 request.body내용이 Undefined로 나오는 이슈가 발생했다.

 

 아래처럼 POST방식으로 json형태의 data를 전송한 후 express.js 파일에서 req.body형태로 데이터를 읽어오려했으나 에러가 발생했다.

//signup.ejs

$.ajax({
    url : "http://localhost:3000/signup",
    type : "POST",
    dataType: 'json',
    data : {
        'username' : username,
        'email' : email,
        'password' : password,
        'access_token' : access_token,
        'refresh_token' : refresh_token,
        'useseqnum' : useseqnum
    },
    success : function(res){
        if(res == '1'){
            alert('회원가입이 완료되었습니다.');
        }else{
            alert('실패!');
        }
    }
});

//express.js 

app.post("/signup", function(req, res){
    console.log("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
    console.log(req.body);
    console.log("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@");
    res.json(1);   
});

Undefined..

express에서 body를 parse하기 위해서는 다음과 같이 코드를 추가한다.


  1. body-parser 모듈을 추가한다.

     npm install body-parser
    
     var bodyParser = require('body-parser')
     app.use(bodyParser.json())

    body-parser라는 node.js모듈을 추가하면 되지만 Express v4.16.0 기준으로 express.js에서 자체 제공하기 때문에 따로 import 할 필요가 없다.

  2. express.json()을 추가한다.

    위에서 언급한 내용과 같이 express.js 자체에 built-in 되어있기 때문에 아래와 같이 코드를 추가해주면 된다.

     var express = require('express')
     var app = express();
     app.use(express.json())
     app.post('/profile', function(req, res) => {
       console.log(req.body)
     })
  3. express.urlencoded();

    위 2번 까지 작업 후 문제가 해결될 줄 알았으나 undefined문제는 해결되었으나 데이터가 나오지 않고 '{ }' 와 같이 빈 브라켓만 출력되는 이슈가 발생했다.

    검색해보니 urlencoded 메서드를 추가해야 한다는 글을 읽게 되었고 아래와 같이 추가하니 데이터가 정상적으로 나오는 것을 확인할 수 있었다.

     app.use(express.urlencoded({extended : false}));

    URL-encoded는 주소 형식으로 데이터를 보내는 방식을 말한다. 위 메서드에는 extended라는 옵션에 따라 다음과 같이 설명된다.

    • {extended : false} → querystring 모듈을 사용하여 쿼리스트링 해석

    • {extended : true} → qs 모듈을 사용하여 쿼리스트링 해석

      qs모듈은 npm패키지이며 querystring 모듈보다 기능이 조금 더 많은 모듈이다.


위와 같이 설정 후 req.body값이 정상적으로 출력되는 것을 확인할 수 있었다.

 

 

 

 

+ Recent posts